2011-06-03 134 views
9

我正在嘗試爲各個字段設置不同分析器的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')。

我已經嘗試用雪球分析器替換默認分析器,然後它工作;事情是,我完全需要具有特定領域的分析儀,所以這不會幫助我。我也嘗試了不同的分析儀,並將「索引」設置爲「否」,但無濟於事。

我在做什麼錯?

回答

11

要使用特定於字段的分析器,您需要在查詢中指定該字段。否則,使用默認分析器。嘗試

curl -XGET 'localhost:9200/twitter/_search?q=message:fight' 

curl -XGET 'localhost:9200/twitter/_search?df=message&q=looking' 
+1

確定,這對搜索分析儀......但不應該像雪球index_analyzer那樣通過分析API直接運行句子時減少「打架」到「打架」?在這種情況下,不管搜索分析儀是否使用,搜索「拼」都會返回一個命中,不是嗎?而且,更重要的是,如果我還不知道要搜索哪個字段呢?我在這裏只有一個,好吧,但最後我需要有幾個,然後搜索它們。 – Felix 2011-06-03 17:16:44

+1

雪球分析儀確實在「信息」字段中減少了「戰鬥」到「戰鬥」。但是,如果您沒有在搜索中指定一個字段,那麼您正在搜索特殊的「_all」字段,該字段將索引「message」字段的內容(以及所有其他字段(如果有的話)),但是會使用默認分析器分析此內容。 – imotov 2011-06-03 17:41:33

+0

好吧,我明白 - 謝謝你解釋,@imotov!仍然...如果索引分析器減少「戰鬥」到「戰鬥」,不會「戰鬥」是ES保存和索引和檢索查詢的標記嗎?因此,如果使用雪球分析儀對文本進行索引,則不會使用標準分析儀搜索「拼」返回匹配結果嗎? – Felix 2011-06-03 22:45:38