雖然mapping
和to_indexed_json
方法有關係,他們有兩個不同的目的,其實。
的mapping
方法的目的是爲了定義一個索引內的文檔屬性映射。您可能要定義某些屬性爲「not_analyzed」,所以它不分成令牌,或者設置一個特定的分析儀的財產,或(你提到)分度時間提升因素。您也可以定義萬事屬性,自定義格式日期類型等
這映射然後使用如。當輪胎自動creates an index for your model。
的to_indexed_json
方法的目的是定義一個JSON序列爲您的文檔/模型。
的default to_indexed_json
method確實使用你的映射定義,只使用在映射定義的屬性 - 的基礎上,如果你關心不夠定義映射,在默認情況下輪胎指數僅與定義的映射屬性。
現在,當你想在你的模型如何,其實是序列化爲JSON用於elasticsearch得緊,你剛纔定義自己to_indexed_json
方法(如README指示)。
這種風俗MyModel#to_indexed_method
通常不關心映射定義,並從頭開始構建JSON序列化(通過利用的ActiveRecord的to_json
,使用JSON建設者如jbuilder,或只是建立一個普通的老哈希並呼籲Hash#to_json
)。
因此,要回答你的問題的最後一部分,同時使用mapping
和to_indexed_json
絕對不產生任何衝突,其實是在elasticsearch使用高級功能的需要。
綜上所述:
- 您使用
mapping
方法來定義你的模型的搜索引擎
- 您使用自定義
to_indexed_json
方法來定義搜索引擎是如何看待你的文件/模型的映射。
如果我想要爲單個模型創建2個不同的索引,該怎麼辦。我如何定義兩個索引? – EmFeld 2013-04-04 07:41:02
您目前在Tire中的單個模型不能有兩個單獨的索引。 – karmi 2013-04-04 08:19:00
謝謝,非常清楚。那麼'to_indexed_json'方法的結果應該在搜索結果的'_source'元素中? – aurels 2014-07-16 13:52:09