我想在一个字段中搜索项目“vision”,但通过在 DSL 中使用 match/match_phrase/term,我只得到了“vision A”、“vision B”、“xx version”、“vision”等结果。
我想要的是精确匹配“vision”应该具有最高分数,并且包含“vision”的项目应该排名在精确匹配之后。排名应该是:
vision > vision A > vision B > xx version
我检查了Elasticsearch 精确匹配术语 https://stackoverflow.com/questions/37529851/elasticsearch-match-exact-term其中将“index”更改为“not_analyzed”被识别以实现精确匹配。但就我而言,不仅需要精确匹配,还需要包含匹配。
对于这个案子我能做什么?谢谢!
要实现这一点,您可以做的是在 q 中包含一些约束bool/should
查询以控制排名。
{
"query": {
"bool": {
"must": {
"match": {
"name": "vision" <--- match on vision
}
},
"should": [
{
"term": {
"name.keyword": { <--- boost exact matches on keyword field (i.e. "vision")
"value": "vision",
"boost": 3
}
}
},
{
"prefix": {
"name.keyword": { <--- boost prefix matches on keyword field (i.e. "vision A" and "vision B"
"value": "vision",
"boost": 2
}
}
}
]
}
}
}
- 第一个子句将匹配包含以下内容的所有文档
vision
在他们的name
field.
- 第二个条款将为以下文件提供更高的推动力:
name.keyword
字段恰好包含vision
. name.keyword
通常是一个keyword
场(以前是not_analyzed
string
field).
- 第三个子句将为以下文档提供稍高的提升:
name.keyword
字段开头为vision
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)