Elasticsearch Match query -- 匹配查詢
摘要
返回滿足匹配項的文檔,這些匹配項可以是字符串、數字、日期、布爾。字符串,會在搜索前被解析。該match查詢是用於執行全文搜索(包括模糊匹配選項)的標準查詢。
參數
你想搜索的字段
匹配規則參數(忽略了一些參數,不常用或者是我不會用的參數)
query
,必選項。字符串、數字、日期、布爾。字符串。該match查詢分析執行搜索之前的任何提供的文本。這意味着match查詢可以在text字段中搜索分析的標記,而不是確切的詞。analyzer
,選填項。指定在執行搜索之前對query
提供的文本進行分析的方式。默認爲field
的分析器一致。auto_generate_synonyms_phrase_query
,選填項。如果"auto_generate_synonyms_phrase_query":true
,則會自動爲詞組組成match phrase
查詢。參見下文匹配詞組 match phrase。operator
,選填項。布爾邏輯,用於解釋query
中的文本。"operator": "or"
:"query": "capital of Hungary"
解釋爲capital OR of OR Hungary
;"operator": "and"
:解釋爲capital AND of AND Hungary
。可以用來組建一個臨時的詞組,某種意義上來說,就類似於match_phrase
查詢。
匹配布爾前綴 match_bool_prefix
這類查詢,會在查詢之前分析query
指定的文本,然後構造出一個bool
複合查詢。query
經過分詞後,除了最後一個詞將被組成一個prefix
查詢外,其他詞組會被構造成tern查詢。總的來說,這類查詢,是bool的一種簡寫
文檔中,下面兩者請求示例等價
GET /_search
{
"query": {
"match_bool_prefix" : {
"state" : "MD CT G"
}
}
}
GET /_search
{
"query": {
"bool" : {
"should": [
{ "term": { "state": "MD" }},
{ "term": { "state": "Cd" }},
{ "prefix": { "state": "G"}}
]
}
}
}
說明
在實驗中,下面的兩種示例並不完全等價;就拿官方提供的數據而言,假如說state
的類型爲text
則下面的兩種情況,結果纔會相同。
GET /bank/_search
{
"query": {
"match_bool_prefix" : {
"state" : "MD CT G"
}
}
}
GET /bank/_search
{
"query": {
"bool" : {
"should": [
{ "term": { "state.keyword": "MD" }},
{ "term": { "state.keyword": "CT" }},
{ "prefix": { "state.keyword": "G"}}
]
}
}
}
若state的類型爲keyword,則下面示例的結果不同
GET /blak_new/_search
{
"query": {
"match_bool_prefix" : {
"state." : "MD CT G"
}
}
}
GET /blak_new/_search
{
"query": {
"bool" : {
"should": [
{ "term": { "state": "MD" }},
{ "term": { "state": "CT" }},
{ "prefix": { "state": "G"}}
]
}
}
}
匹配詞組 match_phrase
這種查詢將分析文本,並從分析的文本中創建短語查詢。
例如一些俚語、專有名詞、縮寫等。分詞器,不會將這些詞組拆分成單個的字。
用戶可以構建自己的詞庫。
請求示例,我在自己的詞庫中添加了一個詞組671 Bristol Street
前一個搜索請求,只要文檔中包含671
或 Bristol
或 Street
就滿足匹配條件;但第二個搜索請求只會匹配存在詞組671 Bristol Street
的文檔
GET /bank/_search
{
"query": {
"match" : {
"address" : {
"query" : "671 Bristol Street",
"auto_generate_synonyms_phrase_query":true
}
}
}
}
GET /bank/_search
{
"query": {
"match_phrase" : {
"address" : {
"query" : "671 Bristol Street"
}
}
}
}
匹配詞組前綴 match_phrase_prefix
以包含的順序,返回所提供文本的單詞的文檔。提供的最後一個詞被視爲前綴,匹配以該詞開頭的任意單詞。簡單的來說,query是一個整體。
下面的這個示例會匹配a rule object,而不會匹配 a best rule of ,rule of you 等;
GET _search
{
"query": {
"match_phrase_prefix": {
"address": {
"query": "a rule o"
}
}
}
}
多關鍵詞匹配查詢 multi_match
- 基於match,允許多個字段查詢
- 字段可以使用通配符
- 字段可以使用
^number
,增強某個字段的重要性 - 如果爲提供
fields
,則會默認爲index.query.default_field
。這回提取映射中符合詞條查詢條件的所有字段,並過濾元數據字段。然後將所有提取的字段組合起來構建查詢。可以一次查詢的字段數有限制。它由“indices.query.bool.max_clause_count
定義。
multi_match的types參數
- best_fields,默認值。query字段的單詞(分詞器分詞後)出現在同一個field文檔相關度要高於出現在多個field文檔。