簡體   English   中英

在彈性搜索中使用通配符進行部分搜索

[英]Partial search using wildcard in Elastic Search

我想使用通配符在彈性搜索中搜索數組值。

在此處輸入圖片說明

{
    "query": {
        "wildcard": {
            "short_message": {
                "value": "*nne*",
                "boost": 1.0,
                "rewrite": "constant_score"
            }
        }
    }
}

我正在搜索“short_messages”,它對我有用。 但我想搜索“messages.message”它不起作用。

{
    "query": {
        "wildcard": {
            "messages.message": {
                "value": "*nne*",
                "boost": 1.0,
                "rewrite": "constant_score"
            }
        }
    }
}

而且我還想在數組中搜索多個字段。

例如:- 字段:["messages.message","messages.subject", "messages.email_search"]

那么就有可能給我最好的解決方案。

提前致謝。

似乎您正在使用messagesnested數據類型。

您需要為此使用nested query

POST <your_index_name>/_search
{
  "query": {
    "nested": {
      "path": "messages",
      "query": {
        "wildcard": {
          "messages.message": {
            "value": "*nne*",
            "boost": 1
          }
        }
      }
    }
  }
}

對於多字段查詢,您可能可以使用query_string因此基本上您的解決方案是在nested query使用query_string

請求參數:

POST <your_index_name>/_search
{
  "query": {
    "nested": {
      "path": "messages",
      "query": {
        "query_string": {
          "fields": ["messages.message", "messages.subject"],
          "query": "*nne*",
          "boost": 1
        }
      }
    }
  }
}

查詢DSL

您還可以使用Query DSL來使用wildcard但同樣,您需要為每個字段添加多個查詢子句,出於性能原因,我懷疑通配符查詢不支持多字段查詢。

POST <your_index_name>/_search
{
  "query": {
    "nested": {
      "path": "messages",
      "query": {
        "bool": {
          "should": [
            {
              "wildcard": { 
                "messages.message": {
                  "value": "*nne*",
                  "boost": 1
                }
              }
            },
            {
              "wildcard": {
                "messages.subject": {
                  "value": "*nne*",
                  "boost": 1
                }
              }
            }
          ]
        }
      }
    }
  }
}

請注意,通配符搜索是不可取的,因為它必須執行的正則表達式操作的數量會影響您獲得響應的延遲,相反,我建議您查看Ngram Tokenizer,從而您可以使用簡單的匹配查詢來得到你想要的結果。

讓我知道這是否有幫助!

暫無
暫無

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

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