我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision A”,“ vision B”,“ xx版本”,“ vision”等结果。
我要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是:
vision > vision A > vision B > xx version
Run Code Online (Sandbox Code Playgroud)
我检查了Elasticsearch匹配精确术语,在该术语中可以识别将“索引”更改为“ 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
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
vision其name字段中包含的所有文档。name.keyword字段精确包含的文档vision。name.keyword通常是一个keyword字段(以前是一个not_analyzed string字段)。name.keyword字段以开头的文档提供更高的提升vision。| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |