子句說明
query子句,是搜尋語句中不可缺少的一部分。它表示在哪個索引欄位下查詢什麼內容,並且可以指定多個查詢條件及其之間的關係(AND \ OR \ ANDNOT \ RANK)。
例如可以將text
類型的title
和subject
2個欄位組合在一起,建立共同的索引欄位default
。此時通過對default
索引的查詢,可以召回查詢詞命中了title
或者subject
原文的文檔。
如果將 title
欄位,單獨建立索引 title_search
。那麼在 title_search
索引做查詢時,只有查詢詞命中了 title
這個欄位的原文,才能召回該文檔。
文法說明
查詢條件式格式設定如下:
普通查詢:index:'查詢詞'^boost
range查詢: index:'circle(
經度值 緯度值
,半徑值)'
range查詢: index:[數值1,數值2]
index(索引欄位):是在定義索引結構時,配置的索引資訊。表示在指定索引欄位包含的源欄位上,尋找包含“查詢詞”的文檔。
查詢詞:表示要進行查詢的內容。
boost:表示要設定的查詢詞權重,類型為int,範圍為[0,99],不設定預設為99。需要在粗排運算式中配置
exact_match_boost()
才會生效,該功能可選。查詢條件可以為多個,支援關係主要有
()
、AND
、OR
、ANDNOT
、RANK
(必須大寫)。優先順序從低到高排列是:RANK
<OR
<AND
<ANDNOT
<()
如果“查詢詞”使用
""
括起來進行查詢,表示 phrase(短語)查詢。即要求查詢詞分詞後各個term的位置相連、順序一致。range查詢,包括地理位置分析和數值分析,具體用法請點擊此處。
注意事項
query子句為必選子句,不可為空。
ANDNOT 串連符不能單獨使用,並且ANDNOT 串連符左邊串連的查詢不能為null,即index_name:'';
若RANK未放置在句末,例:
index1:'xxx' RANK index2:'xxx' AND index3:'xxx'
則RANK需要和其他條件用()綁定,即(index1:'xxx' RANK index2:'xxx') AND index3:'xxx'
,否則RANK後的串連條件將全部參與RANK,即index1:'xxx' RANK (index2:'xxx' AND index3:'xxx')
查詢詞必須要用單(雙)引號括起來,否則查詢報錯無結果或行為不可預期。
只有
TEXT
、SHORT_TEXT
類型的欄位,可以建立複合式索引。boost 值小於0則按照0計算,大於99按照99計算。
關於各種類型的搜尋含義,詳情請參見內建分析器介紹。
樣本
查詢title索引欄位中包含“北京大學”的文檔:
query=title:'北京大學'
查詢title索引欄位中包含“北京大學”的文檔,並且包含“浙江大學”的文檔:
query=title:'北京大學' AND title:'浙江大學'
查詢title索引欄位中包含“北京大學”或者“浙江大學”,且type為“1”的文檔:
query=(title:'北京大學' OR title:'浙江大學') AND type:'1'
查詢title索引欄位中包含“北京大學”或者“浙江大學”,OR文法的其他寫法:
query=title:'北京大學'|'浙江大學'
查詢title索引欄位中包含北京大學且不包含清華的文檔,若title中包含校長則排序上排在前面:
query=(title:'北京大學' ANDNOT title:'清華') RANK title:'校長' // 精排運算式為:text_relevance(title)
查詢title索引欄位中包含北京大學的文檔,要求北京大學不能分開,不希望返回類似“北京的大學”的文檔:
query=title:"北京大學"
數群組類型搜尋:
//假設有一個int arr類型欄位,設定為索引arr_index_1 //表示數組元素有值為1記錄就會被召回 query=arr_index_1:'1'