elasticsearch - Elasticsearch 数组和查询评分中的重复值
问题描述
我有两个文档,其中一个字段country
可以包含重复值,例如
文件1:
country: [US, US, GB, US]
文件2:
country: [US, GB]
我需要一个查询,在查找时country:US
将分配比在字段中多次出现的分数更高的分数Doc1
,而Doc2
在US
查找时它将为两个文档分配相同的分数,因为它在两个文档中出现的次数相同。这可以通过 Elasticsearch 实现吗?country
Doc1
country:GB
解决方案
如果您在美国进行简单的匹配搜索
GET countryindex/_search
{
"query": {
"match": {
"country": "US"
}
}
}
它将为元素的更多频率提供更高的分数,因此 [US, US, GB, US] 将获得比“[US, GB]”更高的分数如果您搜索“GB”->“[US, GB]”将获得比 [US, US, GB, US] 更多的分数,因为较短的字段长度会获得更多分数。
如果您想在匹配数相同时给出相同的分数,则需要在映射中给出norms : false 。
{
"properties": {
"title": {
"type": "text",
"norms": false
}
}
}
推荐阅读
- puppeteer - 在 div 容器中获取表格
- php - Preg_replace 替换中未捕获的捕获组
- python - 如果物体在pygame中与墙壁碰撞,我如何让物体停止移动?
- function - 闰年函数:“返回闰年”正在生成外部函数错误
- flutter - 无法删除flutter cloudfirestore中的文档?
- arrays - Matrix (arrays) in Lua - swap rows and apply row operation
- rest - 如何在 vuejs 中访问具有 Axios 令牌的 API?
- python - 如何获取列表嵌套字典中键的最大值
- web-crawler - 在 Storm Crawler 中抓取特定基本 URL 的所有子 URL 的完成事件
- java - 自定义行映射器的 Junit 代码覆盖率