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頂級引數包括:
引數 |
描述 |
---|---|
|
要解析的實際查詢。參見查詢字串語法。 |
|
如果未指定字首欄位,則查詢字詞的預設欄位。預設為 |
|
如果未指定顯式運算子,則使用預設運算子。例如,使用預設運算子 |
|
用於分析查詢字串的分析器名稱。 |
|
分析器的名稱,用於分析查詢字串中的引用短語。對於這些部件,它將覆蓋使用 |
|
設定時, |
|
設定為 |
|
控制模糊查詢將擴充套件到的術語數。預設為 |
|
|
|
設定模糊查詢的字首長度。預設是 |
|
設定為 |
|
設定短語的預設斜率。如果為零,則需要精確的短語匹配。預設值是 |
|
設定查詢的提升值。預設為 |
|
預設為 |
|
預設情況下,不分析查詢字串中的萬用字元。通過將此值設定為 |
|
限制允許建立的regexp查詢的自動機狀態數。這可以防止太難(例如指數級硬)的regexp。預設為10000。 |
|
一個值,用於控制生成的布林查詢中應該匹配的“should”子句的數量。它可以是絕對值( |
|
如果設定為 |
|
時區應用於與日期相關的任何範圍查詢。另見 JODA時區。 |
|
附加到查詢字串的引用部分的欄位的字尾。這允許使用具有不同分析鏈的欄位進行精確匹配。看看這裡為一個完整的例子。 |
|
是否應為多項同義詞自動生成短語查詢。預設為 |
|
[ |
在生成多項查詢時,可以使用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
對多個欄位執行查詢時,允許使用以下附加引數:
引數 | 描述 |
---|---|
|
應如何組合欄位以構建文字查詢。有關完整示例,請參閱型別。預設為 |
引數 | 描述 |
---|---|
|
用於多場的分離最大連線斷路器。預設為 |
fields引數還可以包括基於萬用字元欄位名稱,允許自動擴充套件到相關欄位(包括動態引入的欄位)。例如:
GET /_search
{
"query": {
"query_string" : {
"fields" : ["content", "name.*^5"],
"query" : "this AND that OR thus"
}
}
}