文章目錄
-
- 示例請求
- 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。