【发布时间】:2014-02-05 11:36:56
【问题描述】:
在我的 Elasticsearch 索引中,我的文档在同一位置有多个标记。
当我在每个位置至少匹配一个标记时,我想取回一个文档。 令牌的顺序并不重要。 我怎样才能做到这一点?我使用 Elasticsearch 0.90.5。
示例:
我这样索引一个文档。
{
"field":"red car"
}
我使用同义词标记过滤器,在与原始标记相同的位置添加同义词。 所以现在在这个领域,有2个职位:
- 位置 1:“红色”
- 位置 2:“汽车”、“汽车”
我现在的解决方案:
为了能够确保所有位置都匹配,我也索引了最大位置。
{
"field":"red car",
"max_position": 2
}
我有一个自定义相似度,它从 DefaultSimilarity 扩展并返回 1 tf()、idf() 和 lengthNorm()。结果分数是字段中匹配项的数量。
查询:
{
"custom_score": {
"query": {
"match": {
"field": "a car is an automobile"
}
},
"_script": "_score*100/doc[\"max_position\"]+_score"
},
"min_score":"100"
}
我的解决方案有问题:
上面的搜索不应该匹配文档,因为查询字符串中没有标记“red”。但它匹配,因为 Elasticsearch 将 car 和 motor 的匹配数计为两个匹配项,因此得分为 2,导致脚本得分为 102,满足“min_score”。
【问题讨论】:
标签: lucene position elasticsearch