zoukankan      html  css  js  c++  java
  • paip.lucene 4.3 中文语义搜索最佳实践

    paip.lucene 4.3 中文语义搜索最佳实践




    首先一个问题是要不要使用lucene 自带的分词器...我觉得最好不使用哪自带的分词器.效果还凑火,就是不好控制...


    先使用ik,ict,mmsj等分词器进行分词..


    然后使用WhitespaceAnalyzer 建立索引...再使用它进行搜索...注意,建立索引以及搜索使用的Analyzer要一样才行..


    要是使用StandardAnalyzer,不个单字也分割开兰,后期过滤麻烦...




    作者Attilax  艾龙,  EMAIL:1466519819@qq.com 
    来源:attilax的专栏
    地址:http://blog.csdn.net/attilax




    -----------------建立索引
    try {
    //索引文件的保存位置
    Directory dir = FSDirectory.open(new File(Constants.INDEX_STORE_PATH));
    //分析器
     
     

     Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_40); 
     

    //配置类
    IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_40,analyzer);
    iwc.setOpenMode(OpenMode.CREATE);//创建模式 OpenMode.CREATE_OR_APPEND 添加模式

    writer = new IndexWriter(dir, iwc);
    } catch (Exception e) {
    e.printStackTrace();
    }


    ------------搜索
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
    QueryParser parser = new QueryParser(Version.LUCENE_40, field,analyzer);
    // 将关键字包装成Query对象
    query = parser.parse(keyword);
    Date start = new Date();
    // 1 根据关键字只取索引库中的前100条document,然后把这100条document按某种方式进行排序,安得分从高到低返回结果。 
    TopDocs results = searcher.search(query, 5 * 2);
    Date end = new Date();
    System.out.println("检索完成,用时" + (end.getTime() - start.getTime())
    + "毫秒");
    return results;
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
  • 相关阅读:
    Git删除本地和远程文件
    MongoDB的安装和环境配置
    Cookie和Session的区别
    如何往npm上上传自定义的模块?
    JS的一些兼容性问题
    【网络流24题】 5. 圆桌问题 题解
    【网络流24题】 6. 最长不下降子序列问题 题解
    【网络流24题】 4. 魔术球问题 题解
    【网络流24题】 3. 最小路径覆盖问题 题解
    【网络流24题】 2. 太空飞行计划问题 题解
  • 原文地址:https://www.cnblogs.com/attilax/p/5964177.html
Copyright © 2011-2022 走看看