Elasticsearch Match query -- 匹配查詢

摘要

返回滿足匹配項的文檔,這些匹配項可以是字符串、數字、日期、布爾。字符串,會在搜索前被解析。該match查詢是用於執行全文搜索(包括模糊匹配選項)的標準查詢。

參數

你想搜索的字段

匹配規則參數(忽略了一些參數,不常用或者是我不會用的參數)

  1. query,必選項。字符串、數字、日期、布爾。字符串。該match查詢分析執行搜索之前的任何提供的文本。這意味着match查詢可以在text字段中搜索分析的標記,而不是確切的詞。
  2. analyzer,選填項。指定在執行搜索之前對query提供的文本進行分析的方式。默認爲field的分析器一致。
  3. auto_generate_synonyms_phrase_query,選填項。如果"auto_generate_synonyms_phrase_query":true,則會自動爲詞組組成 match phrase查詢。參見下文匹配詞組 match phrase。
  4. 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
前一個搜索請求,只要文檔中包含671BristolStreet就滿足匹配條件;但第二個搜索請求只會匹配存在詞組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

  1. 基於match,允許多個字段查詢
  2. 字段可以使用通配符
  3. 字段可以使用^number,增強某個字段的重要性
  4. 如果爲提供fields,則會默認爲index.query.default_field。這回提取映射中符合詞條查詢條件的所有字段,並過濾元數據字段。然後將所有提取的字段組合起來構建查詢。可以一次查詢的字段數有限制。它由“ indices.query.bool.max_clause_count定義。

multi_match的types參數

  1. best_fields,默認值。query字段的單詞(分詞器分詞後)出現在同一個field文檔相關度要高於出現在多個field文檔。

未完待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章