1. 程式人生 > >elasticsearch 基礎 —— Query String

elasticsearch 基礎 —— Query String

使用查詢解析器來解析其內容的查詢。下面是一個例子:

GET /_search
{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "this AND that OR thus"
        }
    }
}

query_string查詢解析輸入並在運算子周圍分割文字。每個文字部分彼此獨立地分析。例如以下查詢:

GET /_search
{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "(new york city) OR (big apple)"
        }
    }
}

將分成new york city 或 big apple,然後通過為該欄位配置的分析器獨立地分析每個部分。

空格不被視為運算子,這意味著new york city將“按原樣”傳遞給為該欄位配置的分析器。如果該欄位是關鍵字欄位,則分析器將建立單個術語new york city,並且查詢構建器將在查詢中使用此術語。如果要分別查詢每個術語,則需要在術語周圍新增顯式運算子(例如new AND york AND city)

當提供多個欄位時,也可以修改如何使用型別引數在每個文字部分內組合不同欄位查詢。這裡描述了可能的模式,預設是Bestfield。query_string頂級引數包括: 

引數
描述

query

要解析的實際查詢。參見查詢字串語法

default_field

如果未指定字首欄位,則查詢字詞的預設欄位。預設為index.query.default_field索引設定,而索引設定預設為*.*提取對映中符合術語查詢條件的所有欄位,並過濾元資料欄位。然後組合所有提取的欄位以在沒有提供字首欄位時構建查詢。

default_operator

如果未指定顯式運算子,則使用預設運算子。例如,使用預設運算子OR,查詢 capital of Hungary將轉換為capital OR of OR Hungary

,並且使用預設運算子AND,將相同的查詢轉換為capital AND of AND Hungary。預設值為OR

analyzer

用於分析查詢字串的分析器名稱。

quote_analyzer

分析器的名稱,用於分析查詢字串中的引用短語。對於這些部件,它將覆蓋使用analyzer引數或 search_quote_analyzer設定設定的其他分析器。

allow_leading_wildcard

設定時,*?允許作為第一個字元。預設為true

enable_position_increments

設定為true在結果查詢中啟用位置增量。預設為true

fuzzy_max_expansions

控制模糊查詢將擴充套件到的術語數。預設為50

fuzziness

設定模糊查詢的模糊性。預設為AUTO。請參閱允許設定的模糊性編輯

fuzzy_prefix_length

設定模糊查詢的字首長度。預設是0

fuzzy_transpositions

設定為false禁用模糊轉置(ab→ ba)。預設是true

phrase_slop

設定短語的預設斜率。如果為零,則需要精確的短語匹配。預設值是0

boost

設定查詢的提升值。預設為1.0

auto_generate_phrase_queries

預設為false

analyze_wildcard

預設情況下,不分析查詢字串中的萬用字元。通過將此值設定為true,將盡最大努力分析這些值。

max_determinized_states

限制允許建立的regexp查詢的自動機狀態數。這可以防止太難(例如指數級硬)的regexp。預設為10000。

minimum_should_match

一個值,用於控制生成的布林查詢中應該匹配的“should”子句的數量。它可以是絕對值(2),百分比(30%)或兩者的 組合

lenient

如果設定為true將導致基於格式的失敗(如向數字欄位提供文字)將被忽略。

time_zone

時區應用於與日期相關的任何範圍查詢。另見 JODA時區

quote_field_suffix

附加到查詢字串的引用部分的欄位的字尾。這允許使用具有不同分析鏈的欄位進行精確匹配。看看這裡為一個完整的例子。

auto_generate_synonyms_phrase_query

是否應為多項同義詞自動生成短語查詢。預設為true

all_fields

6.0.0 ] 在6.0.0中已棄用。設定default_field*代替執行上可以查詢對映檢測到的所有欄位的查詢。_all禁用該欄位時將預設使用,並且未default_field指定no (在索引設定或請求正文中)並且未fields指定no 。

在生成多項查詢時,可以使用rewrite 引數控制如何重寫它 。

Default Field

如果未在查詢字串語法中明確指定要搜尋的欄位,index.query.default_field則將使用該欄位來派生要搜尋的欄位。如果index.query.default_field未指定,query_string則將自動嘗試確定索引對映中可查詢的現有欄位,並對這些欄位執行搜尋。請注意,這不包括巢狀文件,使用巢狀查詢來搜尋這些文件。

Multi Field

query_string查詢還可以運行鍼對多個領域。可以通過"fields"引數提供欄位(示例如下)。

field1:query_term OR field2:query_term | ...

query_string針對多個欄位執行查詢的想法是將每個查詢字詞擴充套件為OR子句,如下所示:

例如,以下查詢

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["content", "name"],
            "query" : "this AND that"
        }
    }
}

匹配相同的單詞

GET /_search
{
    "query": {
        "query_string": {
            "query": "(content:this OR name:this) AND (content:that OR name:that)"
        }
    }
}

由於從單個搜尋項生成了多個查詢,因此使用dis_max帶有tie_breaker 的查詢自動組合它們。例如(name使用^5符號表示增強5 ):

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["content", "name^5"],
            "query" : "this AND that OR thus",
            "tie_breaker" : 0
        }
    }
}

簡單萬用字元也可用於搜尋文件的特定內部元素“內”。例如,如果我們有一個city包含多個欄位(或帶有欄位的內部物件)的物件,我們可以自動搜尋所有“城市”欄位:

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["city.*"],
            "query" : "this AND that OR thus"
        }
    }
}

另一種選擇是在查詢字串本身中提供萬用字元欄位搜尋(正確轉義*符號),例如 city.\*:something

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "city.\\*:(this AND that OR thus)"
        }
    }
}

由於\(反斜槓)是json字串中的特殊字元,因此需要對其進行轉義,因此上面的兩個反斜槓query_string

query_string對多個欄位執行查詢時,允許使用以下附加引數:

引數 描述

type

應如何組合欄位以構建文字查詢。有關完整示例,請參閱型別。預設為best_fields

引數 描述

tie_breaker

用於多場的分離最大連線斷路器。預設為0

 fields引數還可以包括基於萬用字元欄位名稱,允許自動擴充套件到相關欄位(包括動態引入的欄位)。例如:

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["content", "name.*^5"],
            "query" : "this AND that OR thus"
        }
    }
}