簡體   English   中英

elasticsearch 是否忽略 match_phrase 中的點?

[英]Does elasticsearch ignore dot in match_phrase?

我正在使用match_phrase進行如下搜索:

"match_phrase": {
                            "name": "XX .S"
                          }

並找到名稱為"name" : "XX S&#","name": "XX S Ltd" 似乎忽略了. 在搜索中。 經過一些調查,當它標記字符串中的單詞時,該dot可能會在索引期間被條紋化。 如果這是真的,我如何讓搜索將dot視為常規字符? 如果它不是真的,是什么原因造成的,我該如何解決?

我期待的是我可以通過查詢XX .S得到以下響應

A XX .S B
XX .S
XX .S11
XX .Sa

到目前為止,我發現的關於match_phrase的唯一問題是它沒有 escape . . 它適用於其他情況。

創建索引時,您需要將“名稱”定義為關鍵字類型。 默認為文本類型,將由彈性搜索引擎標記。

name": {
    "type": "keyword"
}

使用通配符:

{
    "from": 0,
    "size": 200,
    "query": {
        "bool": {
            "filter": [
                {
                    "bool": {
                        "must": [
                            {
                                "wildcard": {
                                    "name": {
                                        "wildcard": "*XX .S*",
                                        "boost": 1
                                    }
                                }
                            }
                        ],
                        "adjust_pure_negative": true,
                        "boost": 1
                    }
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "_source": {
        "includes": [
            "name"
        ],
        "excludes": []
    }
}

您可以通過引入/(而不是替換)這樣的更多keyword字段來保留舊的搜索邏輯。

{
  "foo": {
    "type" "text",
    "fields": {
      "raw": { 
        "type":  "keyword"
      }
    }
  }
}

您可以使用foo.raw字段執行全文搜索。

這是您需要查詢以獲得結果的內容

{
    "query": {
        "wildcard": {
            "foo.raw": "*XX .S*"
        }
    }
}

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/multi-fields.html查看更多詳細信息

最好的事物,

暫無
暫無

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

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