子句說明
查詢query功能,是搜索語句中最基礎,也是不可缺少的一部分。它表示在哪個索引字段下查詢什么內容,并且可以指定多個查詢條件及其之間的關系(AND \ OR \ ANDNOT \ RANK)。
例如可以將TEXT類型的title和subject 2個字段組合在一起,創建共同的索引default。此時通過default索引的查詢,可以召回查詢詞命中了title或者subject原文的文檔。
如果將 title字段,單獨建立索引 title_search。那么在 title_search索引做查詢時,只有查詢詞命中了title這個字段的原文,才能召回該文檔。
語法說明
{
"query": ""
}
query子句是一個必選子句,它的內容是待查詢的索引與查詢詞組成的字符串,例如 title:'開放搜索' AND tag:'1',具體的查詢拼接語法請參考簡單查詢和高級查詢部分。
簡單查詢
查詢語法:
索引名:'查詢詞'^boost 查詢條件 索引名:'查詢詞'^boost
索引名:是在定義索引結構時,配置的索引信息。表示在指定索引字段包含的源字段上,查找包含“查詢詞”的文檔。
查詢詞:表示要進行查詢的內容。
boost:表示要設置的查詢詞權重,類型為int,范圍為[0,99],不設置默認為99。
查詢條件可以為多個,支持關系主要有
()
、AND
、OR
、ANDNOT
、RANK
(必須大寫),它們之間的優先級從低到高排列是:RANK,OR,AND,ANDNOT,()。AND 表示兩個查詢詞的交集,比如default:'手機' AND default:'藍牙',表示查詢包含“手機”和“藍牙”同時出現的文檔。
OR 表示兩個查詢詞的并集,比如default:'手機' OR default:'藍牙',表示查詢包含“手機”或者“藍牙”的文檔。
ANDNOT 表示第一個查詢成立并且第二個不成立的集合,比如default:'手機' ANDNOT default:'藍牙',表示查詢包含“手機”,并不包含“藍牙”的文檔。
RANK 表示第一個查詢成立,并且第二個查詢不一定成立的集合。比如default:'手機' RANK default:'藍牙',表示查詢包含“手機”的文檔,文檔并不一定包含“藍牙”。該語法主要用于某些查詢詞不影響召回,只影響算分的場景,例如上面的例子中配合文本相關性計算可以實現優先將含有藍牙的文檔排在前面。
高級查詢
多個查詢詞共用索引名
查詢語法:
索引名:'查詢詞'^boost | '查詢詞'^boost
索引名:'查詢詞'^boost & '查詢詞'^boost
'|' 表示多個查詢詞之間是OR關系,'&'表示多個查詢詞是AND關系。
短語查詢
查詢語法:
索引名:"查詢詞"^boost 查詢條件 索引名:"查詢詞"^boost
將“查詢詞”使用 ""
括起來進行查詢,表示 phrase(短語)查詢。即要求查詢詞分詞后各個term的位置相連、順序一致。
如果“查詢詞”使用
""
括起來進行查詢,表示 phrase(短語)查詢。即要求查詢詞分詞后各個term的位置相連、順序一致。range查詢,包括地理位置分析和數值分析,具體用法請點擊此處。
在最終生成query子句時需要將短語查詢中的雙引號進行轉義處理。
地理位置查詢:
查詢語法:
索引名:'SHAPE(ARGS...)'
其中SHAPE(ARGS...)可以是:
點:point(LON LAT),注:LON表示經度,LAT表示緯度,中間是空格
圓:circle(LON LAT,Radius),注:LON表示經度,LAT表示緯度,Radius是半徑,單位:米。
矩形:rectangle(minLON minLAT,maxLON maxLAT),注:緯度上,maxY>=minY,如果寫反了,會自動調整; 經度上,minX到maxX是由西向東理解的,如果寫反了,代表的范圍也就錯了。
多邊形:polygon(LON1 LAT1,LON2 LAT2,LON3 LAT3,LON4 LAT4,...),多邊形可以是凸多邊形或凹多邊形;多邊形起止點需要保證一致;相鄰的兩條邊不能共線;多邊形的邊不允許自相交。
注意:
查詢的索引必須是空間類型索引。
對Spatial索引的查詢圖形要使用單引號('')將其引起來,如:query=spatial_index:'circle(130.0 10.0,1000.0)'。
線和多邊形的點坐標會映射到平面展開的世界地圖上,以此確定線和多邊形范圍,不考慮跨180度經線的情況。location倒排的查詢結果是精確的。line和polygon倒排的查詢結果需要進行過濾。
數值范圍查詢:
查詢語法:
索引名:(數值1,數值2]
數值1,數值2表示數值范圍的起止值,支持數值范圍查詢的開閉區間查詢,'('表示開區間,']'表示閉區間。
例子:
開區間查詢:query = price:(3,100), 表示查詢3<x<100的數據。
閉區間查詢:query = price:[3,100],表示查詢3<=x<=100的數據
半開半閉查詢:query = price:(3,100],表示查詢3<x<=100的數據。
起始值不指定:query=price:(, 100),表示查詢x<100的數據。
注意:
查詢索引必須為數值范圍索引。
數值必須為整型,不支持浮點型。
日期date查詢:
查詢語法:
索引名:(起始時間,結束時間]
起止時間是一個整數類型的時間戳,精確到毫秒。如果起始時間不指定表示從0開始檢索,如果結束時間不指定默認為4102416000000(2100-01-01 00:00對應的毫秒時間戳)。日期查詢也支持日期的開閉區間查詢。
注意:
查詢索引必須為日期類型索引。
時間戳必須為整數,精確到毫秒,如果超過4102416000000,按照410241600000