天天看點

match 查詢

文章目錄

    • 示例請求
    • match 的頂級參數
      • field 的參數
    • 備注
      • 短請求示例
      • 比對查詢如何工作
      • fuzziness
      • zero_terms_query
      • cutoff_frequency
      • 同義詞

官方文檔位址: Match query

傳回與提供的文本、數字、日期或布爾值比對的文檔。在比對之前對提供的文本進行分析。

match

查詢是執行全文搜尋的标準查詢,包括模糊比對選項。

示例請求

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "this is a test"
      }
    }
  }
}
           

match 的頂級參數

<field>

(必選,對象)希望搜尋的字段。

field 的參數

query

(必選)希望在提供的

<field>

中找到的文本、數字、布爾值或日期。

match

查詢在執行搜尋之前分析任何提供的文本。這意味着

match

查詢可以在

text

字段中搜尋已分析的标記,而不是精确的術語。

analyzer

(可選,字元串)用于将

query

值中的文本轉換為标記的分析程式。預設為

<field>

映射的索引時間分析器。如果沒有映射分析程式,則使用索引的預設分析程式。

auto_generate_synonyms_phrase_query

(可選,布爾值)如果為

true

,将自動為多術語同義詞建立

match_phrase

查詢。預設值為

true

參見使用同義詞比對查詢的示例。

fuzziness

(可選,字元串)允許比對的最大編輯距離。有關有效值和更多資訊,請參見

fuzziness

。參見比對查詢中的

fuzziness

示例。

max_expansions

(可選,integer)查詢将擴充到的最大詞彙數。預設值為

50

prefix_length

(可選,integer)為模糊比對保留不變的起始字元數。預設值為

fuzzy_transpositions

(可選,布爾值)如果為

true

,模糊比對的編輯包括兩個相鄰字元(ab→ba)的調換。預設值為

true

fuzzy_rewrite

(可選,字元串)用于重寫查詢的方法。有關有效值和更多資訊,請參閱

rewrite

參數。

如果

fuzziness

參數不為0,則

match

查詢預設使用

top_terms_blended_freqs_${max_expansions}

fuzzy_rewrite

方法。

lenient

(可選,布爾值)如果為

true

,則忽略基于格式的錯誤,例如為數字字段提供文本查詢值。預設值為

false

operator

(可選,字元串)用于解釋

query

值中的文本的布爾邏輯。有效值:

  • OR(預設的):例如,

    capital of Hungary

    被解釋為

    capital OR of OR Hungary

  • AND:例如,

    capital of Hungary

    被解釋為

    capital AND of AND Hungary

minimum_should_match

(可選,字元串)要傳回的文檔必須比對的最小子句數。有關有效值和更多資訊,請參閱

minimum_should_match

參數。

zero_terms_query

(可選,字元串)訓示如果

analyzer

删除所有标記(例如使用

stop

過濾器時),是否不傳回文檔。有效值:

  • none(預設的):如果

    analyzer

    删除所有标記,則不傳回文檔。
  • all:傳回所有文檔,類似于

    match_all

    查詢。

參見

zero_terms_query

查詢的示例。

備注

短請求示例

您可以通過組合

<field>

query

參數來簡化比對查詢文法。例如:

GET /_search
{
  "query": {
    "match": {
      "message": "this is a test"
    }
  }
}
           

比對查詢如何工作

match

查詢的類型為

boolean

。這意味着對提供的文本進行分析,分析過程根據提供的文本構造一個布爾查詢。操作符參數可以設定為

or

and

來控制布爾子句(預設為

or

)。要比對的可選

should

子句的最小數量可以使用

minimum_should_match

參數設定。

下面是一個帶有

operator

參數的例子:

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "this is a test",
        "operator": "and"
      }
    }
  }
}
           

analyzer

可以被設定為控制哪個分析器将對文本執行分析過程。它預設為字段顯式映射定義,或預設搜尋分析器。

可以将

lenient

參數設定為

true

,以忽略由資料類型不比對引起的異常,例如嘗試用文本查詢字元串查詢數字字段。預設值為

false

fuzziness

fuzziness

允許基于被查詢字段的類型進行模糊比對。有關允許的設定,請參見

fuzziness

在這種情況下,可以設定

prefix_length

max_expansions

來控制模糊過程。如果設定了模糊選項,查詢将使用

top_terms_blended_freqs_${max_expansions}

作為重寫方法,

fuzzy_rewrite

參數允許控制如何重寫查詢。

預設情況下允許模糊轉置(ab→ba),但可以通過設定

fuzzy_transpositions

false

來禁用。

注意

模糊比對不适用于具有同義詞的術語,也不适用于分析過程在相同位置産生多個标記的情況。在引擎蓋下,這些術語被展開為一個特殊的同義詞查詢,該查詢混合了術語頻率,不支援模糊展開。

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "this is a testt",
        "fuzziness": "AUTO"
      }
    }
  }
}
           

zero_terms_query

如果分析器像

stop

過濾器那樣删除查詢中的所有标記,則預設行為是根本不比對任何文檔。為了改變這種情況,可以使用

zero_terms_query

選項,它接受

none

(預設值)和對應于

match_all

查詢的

all

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "to be or not to be",
        "operator": "and",
        "zero_terms_query": "all"
      }
    }
  }
}
           

cutoff_frequency

警告:在7.3.0被棄用

這個選項可以省略,因為 match 可以在沒有任何配置的情況下有效地跳過文檔塊,前提是不跟蹤總命中數。

The match query supports a

cutoff_frequency

that allows specifying an absolute or relative document frequency where high frequency terms are moved into an optional subquery and are only scored if one of the low frequency (below the cutoff) terms in the case of an or operator or all of the low frequency terms in the case of an

and

operator match.

This query allows handling

stopwords

dynamically at runtime, is domain independent and doesn’t require a stopword file. It prevents scoring / iterating high frequency terms and only takes the terms into account if a more significant / lower frequency term matches a document. Yet, if all of the query terms are above the given

cutoff_frequency

the query is automatically transformed into a pure conjunction (

and

) query to ensure fast execution.

The

cutoff_frequency

can either be relative to the total number of documents if in the range from 0 (inclusive) to 1 (exclusive) or absolute if greater or equal to

1.0

.

Here is an example showing a query composed of stopwords exclusively:

GET /_search
{
  "query": {
    "match": {
      "message": {
        "query": "to be or not to be",
        "cutoff_frequency": 0.001
      }
    }
  }
}
           
重要

cutoff_frequency

選項在每個分片級别上操作。這意味着,當在測試索引中使用低文檔編号時,您應該遵循相關性中的建議。

同義詞

match

查詢支援使用

synonym_graph

标記過濾器進行多術語同義詞擴充。當使用這個過濾器時,解析器為每個多術語同義詞建立一個短語查詢。例如,下面的同義詞“ny, new york”會産生:

(ny OR ("new york"))
           

也可以用連詞來比對多術語的同義詞:

GET /_search
{
   "query": {
       "match" : {
           "message": {
               "query" : "ny city",
               "auto_generate_synonyms_phrase_query" : false
           }
       }
   }
}
           

上面的例子建立了一個布爾查詢:

(ny OR (new AND york)) city
           

使用術語

ny

或連詞

new AND york

比對文檔。預設情況下,參數

auto_generate_synonyms_phrase_query

設定為true。

繼續閱讀