• lucence(补)


    删除索引
          IndexWriter提供deleteDocuments(Term term);  //会删除索引文件里含有指定Term的所有Document。
          IndexReader也提供了deleteDocuments(Term term);

    8. 更新索引
          IndexWriter提供updateDocument(Term term, Document doc); //实际上是先删除再创建索引。

    9. 常用查询器
      1) TermQuery : 按Term(关键字)查询。构造方法:TermQuery(Term t)
    Query query = new TermQuery(new Term("contents", keyword));  
    isearcher = new IndexSearcher(FSDirectory.open(indexDir), true);  
    TopDocs ts = isearcher.search(query, null, 100);  
          Query query = new TermQuery(new Term("contents", keyword));
          isearcher = new IndexSearcher(FSDirectory.open(indexDir), true);
          TopDocs ts = isearcher.search(query, null, 100); 

      2) BooleanQuery: 布尔查询。组合多个查询器。
    Query query1 = new TermQuery(new Term("contents", keyword));  
    Query query2 = new TermQuery(new Term("contents", keyword2));  
    BooleanQuery query = new BooleanQuery();  
    query.add(query1, Occur.SHOULD);  
    query.add(query2, Occur.SHOULD);  
     
    isearcher = new IndexSearcher(directory, true);   
     
    TopDocs ts = isearcher.search(query, null, 100);  
      Query query1 = new TermQuery(new Term("contents", keyword));
      Query query2 = new TermQuery(new Term("contents", keyword2));
      BooleanQuery query = new BooleanQuery();
      query.add(query1, Occur.SHOULD);
      query.add(query2, Occur.SHOULD);

      isearcher = new IndexSearcher(directory, true);

      TopDocs ts = isearcher.search(query, null, 100);
     

      3) MultiFieldQueryParser: 多Field中查询。
    QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new String[]{"path", "contents"}, analyzer);  
    Query query = parser.parse(keyword);  
    isearcher = new IndexSearcher(FSDirectory.open(indexDir), true);  
    TopDocs ts = isearcher.search(query, null, 100); 
          QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_CURRENT, new String[]{"path", "contents"}, analyzer);
          Query query = parser.parse(keyword);
          isearcher = new IndexSearcher(FSDirectory.open(indexDir), true);
          TopDocs ts = isearcher.search(query, null, 100);

    10. 高亮器Highlighter:在网页中对搜索结果予以高亮显示。
       1) 在classpath添加contrib/highlighter/lucene-highlighter-2.9.1.jar
       2) 示例伪代码
    SimpleHTMLFormatter shf = new SimpleHTMLFormatter("<span style="color:red" mce_style="color:red">", "</span>"); //默认是<b>..</b>   
    // 构造高亮器:指定高亮的格式,指定查询计分器     
    Highlighter highlighter = new Highlighter(shf, new QueryScorer(query));     
    //设置块划分器  
    highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE));    
    String content = highlighter.getBestFragment(Analyzer, "fieldName", "fieldValue"); 
           SimpleHTMLFormatter shf = new SimpleHTMLFormatter("<span style="color:red" mce_style="color:red">", "</span>"); //默认是<b>..</b>
           // 构造高亮器:指定高亮的格式,指定查询计分器  
           Highlighter highlighter = new Highlighter(shf, new QueryScorer(query));  
           //设置块划分器
           highlighter.setTextFragmenter(new SimpleFragmenter(Integer.MAX_VALUE)); 
           String content = highlighter.getBestFragment(Analyzer, "fieldName", "fieldValue");

    11. 优化
      1) 使用IndexWriter须注意
          修改索引后,需flush()或close()方能生效
      2) 使用IndexSearcher须注意
          一旦打开,不会搜索到以后添加的索引
          线程安全,多个线程仅需一个实例
      3) 最佳实践
          多个线程共享一个IndexSearcher, 只有当索引修改后才重新打开IndexSearcher
          多个线程共享一个IndexWriter并严格同步
          异步修改索引提高性能(JMS)
          为每个Document创建单独的索引目录

  • 相关阅读:
    18-10-11 关于触发器的学习
    18-10-29 关于设计器机器人等安装遇到的问题的解决方法
    18-10-25 全局函数测试总结 创建时间的目录 网页获取数据 写入数据
    18-09-08 关于Linux 的安装遇到的一些小坑
    18-08-27 机器人自动化之页面表格数据的定位拾取
    day 96 关于分页的使用
    day73 母版 中间件
    通过 U 盘启动重装 macOS 系统
    MAMP 环境下为 php 添加 pcntl 扩展
    使用 Composer 安装 Laravel 框架
  • 原文地址:https://www.cnblogs.com/weipeng/p/2455061.html
Copyright © 2020-2023  润新知