全部產品
Search
文件中心

OpenSearch:query子句

更新時間:Jul 13, 2024

子句說明

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

例如可以將text類型的titlesubject2個欄位組合在一起,建立共同的索引欄位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()才會生效,該功能可選。

  • 查詢條件可以為多個,支援關係主要有 ()ANDORANDNOTRANK (必須大寫)。優先順序從低到高排列是: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')

  • 查詢詞必須要用單(雙)引號括起來,否則查詢報錯無結果或行為不可預期。

  • 只有 TEXTSHORT_TEXT 類型的欄位,可以建立複合式索引。

  • boost 值小於0則按照0計算,大於99按照99計算。

  • 關於各種類型的搜尋含義,詳情請參見內建分析器介紹。

樣本

  1. 查詢title索引欄位中包含“北京大學”的文檔:

    query=title:'北京大學'
  2. 查詢title索引欄位中包含“北京大學”的文檔,並且包含“浙江大學”的文檔:

    query=title:'北京大學' AND title:'浙江大學'
  3. 查詢title索引欄位中包含“北京大學”或者“浙江大學”,且type為“1”的文檔:

    query=(title:'北京大學' OR title:'浙江大學') AND type:'1'
  4. 查詢title索引欄位中包含“北京大學”或者“浙江大學”,OR文法的其他寫法

    query=title:'北京大學'|'浙江大學'
  5. 查詢title索引欄位中包含北京大學且不包含清華的文檔,若title中包含校長則排序上排在前面:

    query=(title:'北京大學' ANDNOT title:'清華') RANK title:'校長'
    // 精排運算式為:text_relevance(title)
  6. 查詢title索引欄位中包含北京大學的文檔,要求北京大學不能分開,不希望返回類似“北京的大學”的文檔:

    query=title:"北京大學"
  7. 數群組類型搜尋:

    //假設有一個int arr類型欄位,設定為索引arr_index_1
    //表示數組元素有值為1記錄就會被召回
    query=arr_index_1:'1'