子句說明
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'