首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Elasticsearch:如何对精确匹配进行排名?

Elasticsearch:如何对精确匹配进行排名?
EN

Stack Overflow用户
提问于 2018-10-26 03:15:34
回答 1查看 3.3K关注 0票数 6

我想搜索项目“愿景”的一个字段,但我刚刚得到的结果,如“视觉A",”视觉B","xx版本“,”视觉“等使用匹配/匹配_phrace/术语在DSL。

我想要的是精确匹配的“视觉”应该有最高的分数,而包含“视觉”的项目应该排在精确匹配的后面。排名应是:

代码语言:javascript
运行
复制
vision > vision A > vision B > xx version

我检查了Elasticsearch match exact term,其中将“索引”更改为"not_analyzed“以实现精确匹配。但在我的例子中,不仅需要精确匹配,还需要包含匹配。

我能为这个案子做些什么?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-26 04:00:59

要实现这一点,您可以做的是在Q bool/should查询中包含一些约束,以控制排名。

代码语言:javascript
运行
复制
{
  "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开头的文档提供更高的支持。
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53000901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档