我在Lucene中根据三个字段索引了文档:标题,地址,城市。现在我想构建我的查询说, C A B ,以便我可以按如下方式检索文档:
C 必须出现在文件的标题字段中,并且 A 或 B 必须存在在匹配文档的地址和城市字段中。在这些字段中存在A的文档应该获得更高的分数或更高的提升。这里 A , B , C 可以是单个术语或短语。
我是Lucene的新手。我没有构建这种复杂查询的经验。在这方面,我已阅读帖子Boost factor in MultiFieldQueryParser 但这篇文章没有回答我的问题。所以,如果有人请帮助我解决这个问题,我将非常感激。
答案 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
而得到更多提升。