elasticsearch學習筆記高級篇(八)——基於boost的細粒度搜索條件權重控制

需求:搜索標題中包含java的帖子,同時若是標題中包含hadoop和elasticsearch就優先搜索出來,同時,若是一個帖子包含java hadoop,一個帖子包含java elasticsearch,包含hadoop的帖子要比elasticsearch優先搜索出來。java

搜索條件的權重,boost,能夠將某個搜索條件的權重加大,此時當匹配這個搜索條件和匹配另外一個搜索條件的document,計算relevance score時,匹配權重更大的搜索條件的document, relevance score會更高,固然也就會優先被返回回來。elasticsearch

在默認的狀況下,搜索條件的權重都是同樣的,都是1oop

GET /forum/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "java"
          }
        }
      ],
      "should": [
        {
          "match": {
            "title": "hadoop"
          }
        },
        {
          "match": {
            "title": "elasticsearch"
          }
        },
        {
          "match": {
            "title": "spark"
          }
        }
      ]
    }
  }
}

這個測試很差復現,在出現的結果中若是不是咱們想要的,咱們能夠根據上面的需求調節一下boost,來讓最後的返回結果達到咱們的預期。測試

GET /forum/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "java"
          }
        }
      ],
      "should": [
        {
          "match": {
            "title": {
              "query": "hadoop",
              "boost": 5
            }
          }
        },
        {
          "match": {
            "title": {
              "query": "elasticsearch",
              "boost": 3
            }
          }
        },
        {
          "match": {
            "title": {
              "query": "spark",
              "boost": 1
            }
          }
        }
      ]
    }
  }
}
相關文章
相關標籤/搜索