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
這個章節牽涉比較廣,官網上的文件也有些錯誤,要仔細留意一下