lucene in action笔记之二搜索基础

一、简单的搜索程序

  1. 主要搜索的类:1) IndexSearcher     搜索操作入口,所有的搜索操作都是通过IndexSearcher实例使用一个重载的search方法来实现。        2)Query及其子类   具体的Query子类为每一种特定类型的查询进行了逻辑上的封装。Query实例被传递到IndexSearchsearch方法中               3) QueryParser    将用户输入的(并且可读的)查询表达式处理为一个具体的Query对象             4) Hits    提供对搜索结果的访问。Hits对象由search方法返回
  2. 使用QueryParser解析查询表达式: 1)QueryParser是程序的搜索部分中唯一需要使用分析器的类。 2)如果解析不成功会抛出ParseException,程序应该能有效处理。  
  3. 使用IndexSearcher    1)推荐通过Directory对象构造IndexSearcher实例     2)FsDirectory.getDirectory(indexDir,  false) 的最后一个参数false表示我们希望打开的是一个已经存在的索引而非构造一个新的索引。    3)注意:IndexSearcher实例只搜索在他被实例化时已存在的索引。如果制作索引和搜索并发进行,那么最新你索引的文档对搜索来说是不可见的。
  4. 建议不要调用Hits类的doc(n)、id(n)和score(n)方法。因为这些方法需要在文档还没有被放入缓存之前就将器从索引中读取出来。

二、Lucene评分机制

  1. Explanation对象的内部包含了所有关于评分计算中各个因子的细节信息。

三、Query对象

  1. QueryParser类中的静态方法parse(String query, String field, Analyzer analyzer)内部运作:该静态方法在函数内部传建了一个QueryParser实例,并调用了该实例的parse(String query)方法。
  2. TempQuery 
    public void testTerm() throws Exception {
        IndexSearcher searcher = new IndexSearcher(directory);
        Term t = new Term("subject", "ant");
        //"subject"是域名,"ant"是查询项的值
       Query query = new TermQuery(t);
        Hits hits = searcher.search(query);
        assertEquals("JDwA", 1, hits.length());
    
        t = new Term("subject", "junit");
        hits = searcher.search(new TermQuery(t));
        assertEquals(2, hits.length());
    
        searcher.close();
      }
             1)注意:查询项的值是区分大小写的。此外,由于不同的分词器的索引方式都不同,所以对原文的搜索可能还有其它问题。   2)TempQuery类在根据关键字(即通过Field.Keyword()索引过的关键字)查询文档时显得特别有用。    3)如果单个单词作为查询表达式,QueryParse的parse()函数将返回一个TermQuery对象。这个单词就相当于一个单独的项。
  3. RangeQuery
     RangeQuery query = new RangeQuery(begin, end, true);
    //begin、end均为项Term
    //true 指明搜索边界包含在搜索范围之内,反之为false
     IndexSearcher searcher = new IndexSearcher(directory);
     QueryParser可用[起始 To 终止]或{起始 To 终止}表达式来构造。前者边界包含在搜索范围,后者反之。
  4. PrefixQuery
  5. BooleanQuery
  6. PhraseQuery
  7. WildcardQuery
  8. FuzzyQuery

四、解析查询表达式 QueryParser

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值