在談 "_all" 這個field 前 ,先看 elasitcserch 內的 default 的 search field。
當在使用 search 時,如果你的 query syntax 沒有指名說你要 search 哪個 field 時,預設的情況下,會 search 的欄位就是 "_all" 這個欄位就是預設的 default field。
(可以在 index.query.default_field 更改)
_all 這個欄位,其實就是 doc 欄位的集合。
如果你的應用是,document裡面的欄位都必須當成一個完整的term,也就是說,就算他們包含空白,在做 facet 呈現時也不希望把他們斷開成兩個字。
(還有另外一種處理方式就是使用 multi field ,也就是說從 raw data 索引後,可能有兩個以上的欄位表示同一個欄位,然後各自可以採用不同的 analyzer 跟 tokenizer 。)
這時候就可以充分的利用 _all 這個欄位的 analyzer 的設定。
PUT http://es_url/INDEX/
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
},
"mappings": {
"logs": {
"_all": {
"type": "string",
"index": "analyzed",
"analyzer": "standard"
}
}
}
}
此處的 logs 表示的是 document type,可依照需求置換。
透過這樣的設定你就可以得到 search 欄位裡面的 結果,但是又有正確的 facet 效果。
kimchy
You don't want to set the analyzer for _all to be keyword, _all is an aggregation of all the other fields int the doc, so you basically treat the whole aggregation of text as a single token.
from ElasticSearch Users - Specifying analyzer for _all field
http://elasticsearch-users.115913.n3.nabble.com/Specifying-analyzer-for-all-field-td3851732.html
Its a copy of all the fields "aggregated" into the _all field.
_all
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-all-field.html
沒有留言:
張貼留言