簡體   English   中英

elasticsearch賦予不同領域和方案更多的權重

[英]elasticsearch giving more weight to different fields and scenarios

我有這個ES查詢:

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "test",
            "fields": [
              "name^-1.0",
              "id^-1.0",
              "address.city^-1.0",
              "address.street^-1.0"
            ],
            "type": "phrase_prefix",
            "lenient": "true"
          }
        }
      ],
      "boost": 1.0,
      "minimum_should_match": "1"
    }
  },
  "from": 0,
  "size": 20
}

當前發生的是,當我搜索名稱為john ,我會得到一堆結果,其中id, address.city, address.street包含john,這很好,但是我希望name更重要,而且如果我在es中有2個人john和2個人這樣的名字,例如george john我希望公正的john首先出現。

我能做到嗎? :)

要使任何字段都比其他字段更重要,可以將其增強值設置為更高的值。 所以,如果fieldA^4fieldB^1則意味着fieldA是4倍以上更重要fieldB 因此,您可以給name字段賦予更高的提升值,使其對得分更重要。

對於第二點, name字段值為john的文檔將比name字段值為george john的文檔得分更高(假設兩個文檔中其他字段的數據相同) 之所以得到第二個文檔(喬治約翰) ,是因為您將所有字段的值都設為負值。

所以要兼顧您的兩點

  • name帶來更高的提升
  • 使所有領域都成為正值。

因此查詢應如下所示:

{
  //"explain": true,
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "john",
            "fields": [
              "name^4.0",
              "id^1.0",
              "address.city^1.0",
              "address.street^1.0"
            ],
            "type": "phrase_prefix",
            "lenient": "true"
          }
        }
      ],
      "boost": 1,
      "minimum_should_match": "1"
    }
  },
  "from": 0,
  "size": 20
}

要了解有關彈性如何計算匹配文檔的分數的更多信息,可以在查詢中使用"explain": true 這將給出結果的詳細步驟,由Elastic進行計算以計算分數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM