• 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;
    }

  • 相关阅读:
    原生js写的flybird小游戏
    vue的图片上传
    移动端常用的meta标签,媒体查询以及一些样式设置《转载收藏》
    面向对象写的简单的colors rain
    canvas小球
    JS基础(常见操作函数和数组的方法)
    JS基础(instanceof详解)
    JS基础(垃圾回收)
    JS基础(arguments详解)
    JS基础(显性原型和隐性原型)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3424049.html
Copyright © 2020-2023  润新知