我正在嘗試爲各個字段設置不同分析器的ElasticSearch索引。但是,我似乎無法找到設置現場特定分析儀的方法。這裏是我如何創建我的(測試)指數:ElasticSearch映射不起作用
curl -XPOST localhost:9200/twitter
curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d '
{
"tweet" : {
"properties" : {
"message" : {
"type" : "string",
"search_analyzer" : "snowball",
"index_analyzer" : "snowball"
}
}
}
}'
如果我正確地閱讀文檔,那麼這應該創建索引「嘰嘰喳喳」與類型「鳴叫」,和內容的「消息」字段應該是通過雪球干擾分析儀進行分析。 爲了測試這一點,我嘗試以下查詢:
curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"message" : "Look, a fighting War-Unicorn!"
}'
curl -XGET localhost:9200/twitter/_search?q=fight
如果我沒有記錯的話,那麼這應該返回一個打擊,因爲鬥爭是戰鬥幹;問題是,它沒有,我得到零點擊。看起來好像ElasticSearch完全忽略了映射(即使ElasticSearch接受所有這些查詢,因爲我爲它們中的每一個都得到'ok')。
我已經嘗試用雪球分析器替換默認分析器,然後它工作;事情是,我完全需要具有特定領域的分析儀,所以這不會幫助我。我也嘗試了不同的分析儀,並將「索引」設置爲「否」,但無濟於事。
我在做什麼錯?
確定,這對搜索分析儀......但不應該像雪球index_analyzer那樣通過分析API直接運行句子時減少「打架」到「打架」?在這種情況下,不管搜索分析儀是否使用,搜索「拼」都會返回一個命中,不是嗎?而且,更重要的是,如果我還不知道要搜索哪個字段呢?我在這裏只有一個,好吧,但最後我需要有幾個,然後搜索它們。 – Felix 2011-06-03 17:16:44
雪球分析儀確實在「信息」字段中減少了「戰鬥」到「戰鬥」。但是,如果您沒有在搜索中指定一個字段,那麼您正在搜索特殊的「_all」字段,該字段將索引「message」字段的內容(以及所有其他字段(如果有的話)),但是會使用默認分析器分析此內容。 – imotov 2011-06-03 17:41:33
好吧,我明白 - 謝謝你解釋,@imotov!仍然...如果索引分析器減少「戰鬥」到「戰鬥」,不會「戰鬥」是ES保存和索引和檢索查詢的標記嗎?因此,如果使用雪球分析儀對文本進行索引,則不會使用標準分析儀搜索「拼」返回匹配結果嗎? – Felix 2011-06-03 22:45:38