我有两个文档,其字段country
可以包含重复的值,例如
文档1:
country: [US, US, GB, US]
文档2:
country: [US, GB]
我需要一个查询,在查找country:US
时会为Doc1
分配比Doc2
更高的分数,因为US
在Doc1
的country
字段中多次出现,而它会在查找country:GB
时为两个文档分配相同的分数,因为它在两个文档中出现的次数相同。这是Elasticsearch可以实现的吗?
如果您正在美国进行简单的匹配搜索
GET countryindex/_search
{
"query": {
"match": {
"country": "US"
}
}
}
它将为更多频率的元素提供更多分数,因此 [US, US, GB, US] 将获得比"[US, GB]"更高的分数 如果您搜索"GB"-->"[US, GB]"将比 [US, US, GB, US] 获得更多分数,因为字段长度越短得到的分数越高。
如果你想在匹配数相同时给出相同的分数,你需要在你的映射中给出规范:false。
{
"properties": {
"title": {
"type": "text",
"norms": false
}
}
}