2014年6月20日 星期五

[elasticsearch] 再談 _all field




當我們索引一份文件的時候,所有的filed


當我們索引一份文件時,會所有的filed 的 text 拆成 (analyze) 成 terms ,並且使用 terms 與 document id 建成 inverted index 。

所以當我們做 full text search時,對 query string ,使用同樣的analyze 流程,去確保拆出同樣的 term 去對index search。

所以,對於 全文搜索來說,我們必須搞清楚 每個 field 是怎麼被定義的,才能確保搜尋出來的結果是正確的。

舉個例來說,
有個 data field 他有一個 exact value 只有單一個 term "2014-09-15"
_all field 包含著全部的 full text field, 所以夠過 analysis 的流程會把 data 轉成三個  terms "2014","09","15"

如果,對 _all field 做search ,query string 是 2014 時,會返回 12 的 tweets match。

GET /_search?q=2014

當我們 query "2014-09-15" 時,query string會被拆成 "2014","09","15" 三個 terms 並且 match 任何包含這三個term的 result。

GET /_search?q=2014-09-15

但是,如果使用 "2014-09-15" 對 date field 做search
他會對 date 做 exact search,只會 match 到 1的 result。

GET /_search?q=date:2014-09-15

當我們使用 2014 這個query string時,

GET /_search?q=date:2014 # 0 result

以上的例子來說明 default 的 _all field 與對欄位做search的差異。


ccf. when analyzers are used

沒有留言:

張貼留言