• 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;
    }
  • 相关阅读:
    2020,最新Model的设计-APP重构之路
    2020,最新APP重构:网络请求框架
    APP重构之路:引入单元测试
    接口测试中postman环境和用例集
    测试行业是该选择手动测试还是自动化测试?
    2020,必备自动生成测试脚本方案
    2020,必备自动化测试 之 “好用例、坏用例”
    2020,你需掌握go 单元测试进阶篇
    前端测试框架Jest——语法篇
    2020,测试生涯该如何转型升级?
  • 原文地址:https://www.cnblogs.com/attilax/p/15199420.html
Copyright © 2020-2023  润新知