Match Query
match查詢接受文本/數字/日期,分析他們,並構件查詢。例如:
GET /_search { "query": { "match" : { "message" : "this is a test" } } }
注意,message 是字段的名字,你可以使用任意字段(包括_all)來代替。
match
match查詢是boolean類型的。這意味着分析所提供的文本,並且分析進程從提供的文本構造一個boolean查詢。操作符可以被設置為or 或者 and 以控制boolean子句(默認為or)。可以通過使用minimun_should_match參數設置要匹配的可選should子句的最小數量。
分析器可以設置控制那個分析器將對文本執行分析過程。它默認為字段顯示映射定義或默認搜索分析器。
可以設置lenient參數為true以忽略因為數據類型不匹配導致的異常,例如嘗試在文本查詢字符串中查詢數字字段。默認為false。
Fuzziness
fuzziness允許基於查詢字段類型的模糊匹配。有關允許的設置,請看Fuzziness一節。
perfix_length和max_expansions可以在這種情況下被設置,以控制模糊過程。如果模糊選擇被設置,則查詢將使用top_terms_blended_freqs_${max_expansions}作為其重寫的方法,fuzzy_rewrite參數允許控制查詢將如何重寫。
模糊轉換(ab->ba)默認被允許,但可以通過將fuzzy_transpositions設置為false來禁止。
以下是提供附加參數的一個例子(注意結構略有變化,message是字段名稱):
GET /_search { "query": { "match" : { "message" : { "query" : "this is a test", "operator" : "and" } } } }
Zero terms query
如果使用的分析儀刪除了像stop過濾器這樣的查詢中的所有令牌,默認的行為是根本不匹配任何文檔。為了改變,可以使用zero_terms_query選項,它接收none(默認)和all,並且符合match_all查詢。
GET /_search { "query": { "match" : { "message" : { "query" : "to be or not to be", "operator" : "and", "zero_terms_query": "all" } } } }
Cutoff frequency
匹配查詢支持cutoff_frequency,允許指定決定或相對文檔頻率,其中高頻率項被移動到可選子查詢中,並且低頻項之一在or操作匹配的情況或者所有的低頻項在and操作符匹配的情況下才能得分。
此查詢允許在運行時動態處理stopwords,與領域無關,不需要停用文件。它可以防止對高頻項進行評分/迭代,如果更高/更低的頻率項與文檔匹配,則僅考慮這些術語。然后,如果所有查詢詞都高於給定的cutoff_frequency,則查詢將自動轉換為純連接(and)查詢,以確保快速執行。
如果在[0..1)范圍內,則cutoff_frequency可以相對於文檔總數,如果大於或等於1.0,cutoff_frequency可以是絕對的文檔總數。
下面是一個例子,顯示了一個由stopwords exclusively組成的查詢。
GET /_search { "query": { "match" : { "message" : { "query" : "to be or not to be", "cutoff_frequency" : 0.001 } } } }
重要:cutoff_frequency選項以per_shard_level運行。這意味着當你嘗試使用低文檔編號的測試索引時,你應該遵循相關性中的建議。
與query_string/field進行對比
查詢匹配系列不會通過"query parsing"過程。它不支持字段名稱前綴,通配符或者其它"高級"功能。由於這個原因,它失敗的機會非常小/不存在,並且它提供一個優秀的行為當它只分析和
運行該文本作為查詢行為(通常是一個文本搜索框)。此外phrase_prefix類型可以提供一個很好的"即時"行為來自動加載搜索結果。
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html