我有一个关于执行涉及排列的lucene查询的问题。
假设我有两个字段:"name“和"keyword”,用户搜索"joes pizza restaurant“。我希望该搜索的一些部分,以匹配“名称”字段的完整内容和一些部分,以匹配关键字字段的完整内容。它应该匹配所有提供的术语,并且应该匹配字段的全部内容。例如,它可以匹配:
1)名称:“joes restaurant”关键词:“披萨”
2)名称:“joes pizza”关键词:“restaurant”
3)名称:“披萨餐厅”关键词:“joes”
4)名称:“披萨”关键词:“joes restaurant”
5)名称:“披萨乔斯”关键词:“餐厅”
但它不会匹配
6)名字:“big joes restaurant”关键词:“披萨”--因为它不是全场的匹配
7)名称:“joes披萨餐厅”关键字:“nomatch”-因为至少有一个术语应该与关键字字段匹配
我已经考虑过通过计算字段的所有排列并使用布尔查询来实现这一点的可能方法,但是,随着术语数量的增加,这种方法的伸缩性不是很好。有没有人知道如何高效地实现这种查询?
发布于 2010-02-09 18:57:58
Lucene文档建议使用单独的字段,这是跨多个字段的查询的'name‘和'keyword’字段的串联。在此字段上执行搜索。
发布于 2010-02-09 17:08:01
让我们将您的查询分为三个部分:
我会这样实现它:
(name:joes OR name:restaurant OR name:pizza) AND (keyword:joes OR keyword:restaurant OR keyword:pizza)任何与此查询匹配的文档在每个字段中都包含原始查询的一部分。(为了节省时间,这可能是一个ConstantScoreQuery )。
相对应
注意,我的项目2和3不是常规Lucene评分的一部分,而是外部Java代码的一部分。
https://stackoverflow.com/questions/2226485
复制相似问题