下载此文档

Lucene的多域查询结果中查询查询结果分页高亮查询结果和结果评分.docx


文档分类:IT计算机 | 页数:约10页 举报非法文档有奖
1/10
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/10 下载此文档
文档列表 文档介绍
Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分

   
    使用lucene构造搜索引擎的时候,如果要针对多个域进行一次性查询,一般来说有三种方法:
    第一种实现方法是创建多值的全包含域的文本进行索引,这个方案最简单。但是这个防范有个缺点:你不能直接对每个域的加权进行控制。
    第二种方法是使用MultiFieldQueryParser,它是QueryParser的子类,它会在后台程序中实例化一个QueryParser对象,用来针对每个域进行查询表达式的解析,然后使用BooleanQuery将查询结果合并起来。当程序向BooleanQuery添加查询子句时,默认操作符OR被用于最简单的解析方法中。为了实现更好的控制,布尔操作符可以使用BooleanClause的常量指定给每个域。,,。下面的程序展示的是如何创建MultiFieldQueryParser类的方法:
[java] view plaincopy
// 在这四个域中检索  
String[] fields = { "ype", "name", "category", "price" };  
Query query = new MultiFieldQueryParser(, fields, analyzer).parse(keyword);  
    第三种方法就是使用高级DisjunctionMaxQuery类,它会封装一个或者多个任意的查询,将匹配的文档进行OR操作。

    以上三种方案中,并不是第三种方案最好,也不是第一种方案就最差。哪种实现方式更适合你的应用程序呢?答案是“看情况”,因为这里存在一些取舍。全包含域是一个简单的解决方案——但这个方案只能对搜索结果进行简单的排序并且可能浪费磁盘空间(程序可能对同样的文本索引两次),但这个方案可能会获得最好的搜索性能。
    MultiFieldQueryParser生成的BooleanQuery会计算所有查询所匹配的文档评分的总和(DisjunctionMaxQuery则只选取最大评分),然后它能够实现针对每个域的加权。你必须对以上3中解决方案都进行测试,同时需要一起考虑搜索性能和搜索相关性,然后再找出最佳方案。


    在检索结果中再次进行检索,是一个很常见的需求,一般有两种方案可以选择:
    ①使用QueryFilter把第一个查询当作一个过滤器处理;
    ②用BooleanQuery把前后两个查询结合起来,。
    针对第一种方法,我需要解释一下。,,lucene的API中这个类已经被废弃了,无法再找到。,但是你又一定要使用QueryF

Lucene的多域查询结果中查询查询结果分页高亮查询结果和结果评分 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数10
  • 收藏数0 收藏
  • 顶次数0
  • 上传人taotao0a
  • 文件大小139 KB
  • 时间2017-08-21