全部產品
Search
文件中心

OpenSearch:SQL

更新時間:Jul 13, 2024

子句說明

查詢query功能,是搜尋語句中最基礎,也是不可缺少的一部分。它表示在哪個索引欄位下查詢什麼內容,並且可以指定多個查詢條件及其之間的關係(AND \ OR \ ANDNOT \ RANK)。

例如可以將TEXT類型的title和subject 2個欄位組合在一起,建立共同的索引default。此時通過default索引的查詢,可以召回查詢詞命中了title或者subject原文的文檔。

如果將 title欄位,單獨建立索引 title_search。那麼在 title_search索引做查詢時,只有查詢詞命中了title這個欄位的原文,才能召回該文檔。

文法說明

簡單查詢

查詢文法:

query=索引名:'查詢詞'^boost 查詢條件 索引名:'查詢詞'^boost

  • 索引名:是在定義索引結構時,配置的索引資訊。表示在指定索引欄位包含的源欄位上,尋找包含“查詢詞”的文檔。

  • 查詢詞:表示要進行查詢的內容。

  • boost:表示要設定的查詢詞權重,類型為int,範圍為[0,99],不設定預設為99。

  • 查詢條件:查詢條件可以為多個,支援關係主要有 ()ANDORANDNOTRANK (必須大寫),它們之間的優先順序從低到高排列是:RANK,OR,AND,ANDNOT,()。

  • AND: 表示兩個查詢詞的交集,比如query=default:'手機' AND default:'藍芽',表示查詢包含“手機”和“藍芽”同時出現的文檔。

  • OR: 表示兩個查詢詞的並集,比如query=default:'手機' OR default:'藍芽',表示查詢包含“手機”或者“藍芽”的文檔。

  • ANDNOT: 表示第一個查詢成立並且第二個不成立的集合,比如query=default:'手機' ANDNOT default:'藍芽',表示查詢包含“手機”,並不包含“藍芽”的文檔。

  • RANK:表示第一個查詢成立,並且第二個查詢不一定成立的集合。比如query=default:'手機' RANK default:'藍芽',表示查詢包含“手機”的文檔,文檔並不一定包含“藍芽”。該文法主要用於某些查詢詞不影響召回,隻影響算分的情境,例如上面的例子中配合文本相關性計算可以實現優先將含有藍芽的文檔排在前面。

進階查詢

多個查詢詞共用索引名

查詢文法:

query=索引名:'查詢詞'^boost | '查詢詞'^boost

query=索引名:'查詢詞'^boost & '查詢詞'^boost

'|' 表示多個查詢詞之間是OR關係,'&'表示多個查詢詞是AND關係。

短語查詢

查詢文法:

query=索引名:"查詢詞"^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倒排的查詢結果需要進行過濾。

數值範圍查詢:

查詢文法:

query=索引名:(數值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)查詢:

查詢文法:

query=索引名:(起始時間,結束時間]

起止時間是一個整數類型的時間戳記,精確到毫秒。如果起始時間不指定表示從0開始檢索,如果結束時間不指定預設為4102416000000(2100-01-01 00:00對應的毫秒時間戳記)。日期查詢也支援日期的開閉區間查詢。

注意:

  • 查詢索引必須為日期類型索引。

  • 時間戳記必須為整數,精確到毫秒,如果超過4102416000000,按照4102416000000處理。