ES搜索内容置顶

2021-05-18 19:29:10 浏览数 (1)

有些时候,我们可能需要人工干预ES的搜索结果,让指定的内容置顶,ES提供了pinned语法来实现该功能。

代码语言:javascript复制
GET article_search/_search
{
  "query" : {
    "pinned":{
      "ids" : ["1234567"],
      "organic": {
        "match" : {
          "title": "制作云"
        }
      }
    }
  },
  "size" : 10,
  "from" : 0
}

pinned里面的ids表示要置顶的文档id列表。

organic是任意的查询语句。我们可以换成一个复杂的查询:

代码语言:javascript复制
GET article_search/_search
{
  "query" : {
    "pinned":{
      "ids" : ["1234567"],
      "organic": {
        "bool" : {
          "should" : [
            {
              "match_phrase" : {
                "title" : {
                  "query" : "制作云",
                  "boost" : 2,
                  "slop" : 4
                }
              }
            },
            {
              "multi_match" : {
                "query" : "制作云",
                "type" : "best_fields",
                "fields" : ["title", "plain"],
                "minimum_should_match" : "20%",
                "boost" : 1
              }
            }
          ],
          "minimum_should_match" : 1
        }
      }
    }
  },
  "size" : 10,
  "from" : 0
}

看文档说似乎是从ES 7.4版本开始支持这个语法。

0 人点赞