zoukankan      html  css  js  c++  java
  • lucene Hello World

    一个lucene创建索引和查找索引的样例:

    创建索引:

    public class Indexer {
    private  IndexWriter indexWriter;
    /**
     * 构造器实例化indexWriter
     * @throws Exception 
     */
    public Indexer(String indexPath) throws Exception {
    Directory directory = FSDirectory.open(Paths.get(indexPath));//索引存储的位置
    Analyzer analyzer = new StandardAnalyzer();//标准分析器
    IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
    indexWriter = new IndexWriter(directory, iwc);
    }
    /**
     * 关闭indexWriter
     * @param indexWriter
     * @throws IOException 
     */
    public void close() throws Exception {
    indexWriter.close();
    }
    /**
     * 获取文档Document
     * @throws FileNotFoundException 
     */
    public Document getDocumnet(File f) throws Exception {
    Document doc = new Document();
    doc.add(new TextField("content", new FileReader(f)));
    doc.add(new TextField("tittle",f.getName(),Field.Store.YES));
    doc.add(new TextField("path",f.getCanonicalPath(), Field.Store.YES));
    return doc;
    }
    /**
     * 索引当个文件
     * @throws Exception 
     */
    public void indexFile(File f) throws Exception {
    System.out.println(f.getName());
    Document doc = this.getDocumnet(f);
    indexWriter.addDocument(doc);
    }
    /**
     * 索引一个目录下的所有文件
     * @param filePath 目录路径
     * @return 索引文件的个数
     * @throws Exception 
     */
    public int index(String filePath) throws Exception {
    File[] files = new File(filePath).listFiles();
    for(File f:files) {
    this.indexFile(f);
    }
    return indexWriter.numDocs();
    }
    public static void main(String[] args) {
            String indexPath = "G:\工作\luence\index";
            String dataPath = "G:\工作\luence\data";
            Indexer indexer = null;
            int indexNum=0;
            try {
                indexer = new Indexer(indexPath);
                indexNum = indexer.index(dataPath);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    indexer.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            System.out.println("索引了"+indexNum+"个文件");
        }
    }

    查找索引:

    public class Searcher {
    public static void search(String indexPath,String searchStr) throws Exception {
     
    Directory dir = FSDirectory.open(Paths.get(indexPath));
    IndexReader indeReader = DirectoryReader.open(dir);
    IndexSearcher indexSearch = new IndexSearcher(indeReader);
     
    Analyzer analyzer = new StandardAnalyzer();//标准分词器
    QueryParser parser = new QueryParser("content", analyzer);
    Query query = parser.parse(searchStr);
    TopDocs td = indexSearch.search(query, 10);
    for(ScoreDoc sc:td.scoreDocs) {
    Document doc = indexSearch.doc(sc.doc);
    System.out.println(doc.get("tittle"));
    System.out.println(doc.get("path"));
    }
    }
    public static void main(String[] args) throws Exception {
    Searcher.search("G:\工作\luence\index\", "Hollywood");
    }
    }
  • 相关阅读:
    快速提交一个项目到github或gitee上
    微信web开发问题记录
    解决 VUE项目过大nodejs内存溢出问题
    vue使用动态渲染v-model输入框无法输入内容
    webstorm 支持vue element-ui 语法高亮属性自动补全
    spring websocket报错:No matching message handler methods.
    Failed to start bean 'stompBrokerRelayMessageHandler'; nested exception is java.lang.NoClassDefFoundError: reactor/io/codec/Codec
    远程调用appium server
    appium 特殊操作
    mac下搭建appium
  • 原文地址:https://www.cnblogs.com/jnba/p/10522723.html
Copyright © 2011-2022 走看看