如何使用MultiFieldQueryParser和提升因子?

时间:2013-06-06 05:49:13

标签: lucene

我在Lucene中根据三个字段索引了文档:标题地址城市。现在我想构建我的查询说, C A B ,以便我可以按如下方式检索文档:

C 必须出现在文件的标题字段中,并且 A B 必须存在在匹配文档的地址城市字段中。在这些字段中存在A的文档应该获得更高的分数或更高的提升。这里 A B C 可以是单个术语或短语。

我是Lucene的新手。我没有构建这种复杂查询的经验。在这方面,我已阅读帖子Boost factor in MultiFieldQueryParser 但这篇文章没有回答我的问题。所以,如果有人请帮助我解决这个问题,我将非常感激。

2 个答案:

答案 0 :(得分:0)

  

标题:C AND(地址:A ^ 2 OR城市:A ^ 2或地址:B OR城市:B)

答案 1 :(得分:0)

不要陷入关于MultiFieldQueryParser的阅读,这不是你真正需要的。标准的QueryParser语法可以满足您的需求。

请参阅Lucene QueryParser syntax documentation

如下的查询:

+title:C +((address:A city:A)^2 address:B city:B)

应该做得很好。

解释一下:

+title:C - 要求对标题进行匹配:C。不会返回与此条件不匹配的结果。

+(....) - 要求匹配内部包含的子查询。只要在匹配括号中包含的任何一个可选查询中找到匹配项,就会满足。

(address:A city:A)^2 - 您更喜欢A上的匹配,这两个查询会因^2而得到更多提升。