Azure Search - Part 7 (Azure Search Index 查詢基本介紹)查詢參數詳細資料可以參考 Search Documents (Azure Search Service REST API) 和 SearchParameters Class(.NET SDK),下面會先看幾個常見參數用法
search
Searchable 的欄位搜尋 一或多個 字詞filter
Filterable 欄位做比對是
OData 表達式語法的部份集合
Azure Search 的預設查詢語言,queryType=simple
沒有 fuzzy/slop 選項
詳細內容可以看 Simple query syntax in Azure Search
1-1. AND operator +
搜尋同時符合多個條件
1-2. OR operator |
搜尋多個條件,只要符合一個以上就可以
1-3. NOT operator -
有兩個模式(透過
searchMode控制):
或 排除 - 條件(OR NOT)
searchMode=any, 預設值同時 排除 - 條件(AND NOT)
searchMode=all
1-4. Suffix operator *
text*,找 test 開頭內容1-5. Phrase search operator " "
將
""內的字句視為一個字來搜尋,完全符合才會被搜到
1-6. Precedence operator ( )
在組合多種查詢運算子的情境下,可透過
( )來提高優先順序
特殊情況
實際要查詢的字串中有查詢運算子時
需要在查詢字串中的運算子前面加上 \ 跳脫字元,
NOT operator -
只有出現在空白之後的第一個字元才需要加上
\,在字串中間的-不需要加
*
只有出現在空白前的最後一個字元才需要加上
\,在字串中間的*不需要加
queryType=full
適用情境
指定欄位查詢(Fielded query operation)
運算子需要大寫
下面範例是改良官方範例來的,官方範例在 Lucene query syntax examples for building queries in Azure Search
searchFields 可以指定搜尋欄位範圍)
business_title 是 Senior 不是 junior(business_title:(senior NOT junior))
api-key:252044BE3886FE4A8E3BAA4F595114BB
https://azs-playground.search.windows.net/indexes/nycjobs/docs?api-version=2016-09-01&searchMode=all&queryType=full&searchFields=business_title&search=Senior NOT junior
business_title 是 Senior 不是 junior--> business_title:(senior NOT junior)
work_location 是 N.Y. 或 Qns --> work_location:("N.Y." OR "Qns")
ttps://azs-playground.search.windows.net/indexes/nycjobs/docs?api-version=2016-09-01&searchMode=all&queryType=full&search=business_title:(senior NOT junior) AND work_location:("N.Y." OR "Qns")
``
模糊搜尋(Fuzzy search)
~
0 - 2,預設值為 1 ,用來指定距離值(距離值可以參考 Damerau-Levenshtein 距離)business_title 欄位,與 asosiate(拼字有錯) 有關聯(business_title:asosiate~)
https://azs-playground.search.windows.net/indexes/nycjobs/docs?api-version=2015-02-28-Preview&$select=business_title&queryType=full&search=business_title:asosiate~
0, 就是不使用模糊搜尋(business_title:asosiate~0)
https://azs-playground.search.windows.net/indexes/nycjobs/docs?api-version=2015-02-28-Preview&$select=business_title&queryType=full&search=business_title:asosiate~0
鄰近搜尋(Proximity Search)
~
business_title 欄位,內容需要有 senior analyst,且兩字最多只能相隔 2 字(business_title:"senior analyst"~2)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26$select=business_title%26queryType=full%26search=business_title:%22senior%20analyst%22~2
business_title 欄位,內容需要有 senior analyst,且兩字必需相鄰(business_title:"senior analyst"~0)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26$select=business_title%26queryType=full%26search=business_title:%22senior%20analyst%22~0
詞彙增強(Term Boosting)
評分設定檔 是針對欄位不是字彙)^ ,並加上 提升係數(大於 0 的數字,可以有小數位),預設為 1,business_title 欄位,內容需要有 computer analyst,沒有完全符合的項目, 含有 analyst 排序較前(business_title:computer analyst)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26$select=business_title%26queryType=full%26search=business_title:computer%20analyst
business_title 欄位,內容需要有 computer analyst,沒有完全符合的項目,含有 computer 排序較前(computer^2 analyst)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26$select=business_title%26queryType=full%26search=business_title:computer%5e2%20analyst
正則表達式(Regular Expression)
business_title 欄位,內容需要是 Sen 或是 Jun 接著 ior-->Senior 或 Junior (business_title:/(Sen|Jun)ior/)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26queryType=full%26$select=business_title%26search=business_title:/(Sen|Jun)ior/
萬用字元搜尋(Wildcard Search)
* 表多個字元? 表單一字元* 與 ? 不可以當做搜尋條件的開頭business_title 欄位,內容是 prog-->program or programmer (business_title:prog*)
http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2015-02-28-Preview%26queryType=full%26$select=business_title%26search=business_title:prog*
TF-IDF
$orderby 欄位名稱 來排序asc 表遞增, desc 表遞減$top $skip 參數來指定分頁$count=true 顯示總數只有
searchable欄位可以被 highlight
可指定欄位要強調顯示
最多顯示5塊區塊
highlight=business_title
highlightPreTag
highlightPostTag
這個章節牽涉比較廣,官網上的文件也有些錯誤,要仔細留意一下