我想搜索项目“愿景”的一个字段,但我刚刚得到的结果,如“视觉A",”视觉B","xx版本“,”视觉“等使用匹配/匹配_phrace/术语在DSL。
我想要的是精确匹配的“视觉”应该有最高的分数,而包含“视觉”的项目应该排在精确匹配的后面。排名应是:
vision > vision A > vision B > xx version
我检查了Elasticsearch match exact term,其中将“索引”更改为"not_analyzed“以实现精确匹配。但在我的例子中,不仅需要精确匹配,还需要包含匹配。
我能为这个案子做些什么?谢谢!
发布于 2018-10-26 04:00:59
要实现这一点,您可以做的是在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
的文档。name.keyword
字段完全包含vision
的文档提供更高的支持。name.keyword
通常是keyword
字段(以前是not_analyzed
string
字段)。name.keyword
字段以vision
开头的文档提供更高的支持。https://stackoverflow.com/questions/53000901
复制相似问题