0

我在 Lucene 中基于三个字段对文档进行了索引:titleaddresscity。现在我想构建我的查询,比如CAB,以便我可以按如下方式检索文档:

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

我是 Lucene 的新手。我没有任何构建此类复杂查询的经验。在这种情况下,我已经阅读了MultiFieldQueryParser 中的帖子 Boost factor 但是这篇帖子没有回答我的问题。因此,如果有人请帮我解决这个问题,我将不胜感激。

4

2 回答 2

0

不要沉迷于阅读有关 MultiFieldQueryParser 的内容,这并不是您真正需要的。标准 QueryParser 语法将为您服务。

请参阅 Lucene QueryParser语法文档

像这样的查询:

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

应该做得很好。

稍微解释一下:

+title:C- 要求标题匹配:C。不返回不符合此条件的结果。

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

(address:A city:A)^2- 您更喜欢 A 上的匹配,这两个查询使用^2.

于 2013-06-06T16:29:38.980 回答
0

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

于 2013-06-06T16:21:19.700 回答