簡體   English   中英

如何在elasticsearch中的過濾器中使用query_string?

[英]How to use query_string with the filter in elasticsearch?

我有一個簡單的查詢

GET data/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "last_name": "test"
          }
        },
        {
          "bool": {
            "should": {
              "query_string": {
                "query": "henderson OR Boulder City OR Sloan",
                "fields": [
                  "city_*"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

我想將query_string更改為過濾器。 我不確定如何轉換

      {
          "bool": {
            "should": {
              "query_string": {
                "query": "henderson OR Boulder City OR Sloan",
                "fields": [
                  "city_*"
                ]
              }
            }
          }
        }

變成像

      "filter": {
        "query_string": {
              "query": "henderson OR Boulder City OR Sloan",
              "fields": [
                  "city_*"
              ]
          }
      }

並確保按所有這些城市( henderson OR Boulder City OR Sloan以及所有這些字段( city_*.keyword henderson OR Boulder City OR Sloan進行過濾

有任何想法嗎?

更改

{
      "bool": {
        "should": {
          "query_string": {
            "query": "henderson OR Boulder City OR Sloan",
            "fields": [
              "city_*"
            ]
          }
        }
      }
    }

  {
      "bool": {
        "filter": {
          "query_string": {
            "query": "henderson OR Boulder City OR Sloan",
            "fields": [
              "city_*"
            ]
          }
        }
      }
    }

這會得到您想要的行為嗎? 在過濾器下使用相同的查詢應該會為您提供相同的結果,但是該查詢不會對得分進行加權。

編輯-我將提出的另一項建議是將您的查詢調整為:

GET data/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "last_name": "test"
          }
        }
      ],
      "filter": [
        {
          "query_string": {
            "query": "henderson OR Boulder City OR Sloan",
              "fields": [
                "city_*"
                ]
          }
        }
      ]        
    }
  }
}

編輯2-您也許可以不再使用query_string,這會給您帶來任何速度上的提高嗎? (如果您希望它們不計分,也可以更改應嵌套在過濾器中的“應該”)

GET data/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "last_name": "test"
          }
        }
      ],
      "should": [
        {
          "match": {
            "city_*": "henderson"
          }
        },
        {
          "match": {
            "city_*": "Boulder City"
          }
        },
        {
          "match": {
            "city_*": "Sloan"
          }
        }
      ]        
    }
  }
}

暫無
暫無

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

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