ElasticSearch&Tire:使用Mapping和to_indexed_json
在阅读Tire文档时,我的印象是你应该使用mapping
或to_indexed_json
方法,因为(我的理解是……) mapping
用于提供to_indexed_json
。
问题是,我发现了一些使用它们的教程。 为什么?
基本上,我的应用程序现在使用to_indexed_json
但我无法弄清楚如何设置某些属性的提升值(因此我开始查看映射的原因),我想知道是否使用两者会产生一些冲突。
虽然mapping
和to_indexed_json
方法是相关的,但实际上它们有两个不同的用途。
mapping
方法的目的是为索引中的文档属性定义映射 。 您可能希望将某些属性定义为“not_analyzed”,因此不会将其分解为标记 ,或者为属性设置特定的分析器,或者(如您所述)索引时间提升因子。 您还可以定义多字段属性, 日期类型的自定义格式等。
然后使用该映射,例如。 当轮胎自动为您的模型创建索引时 。
to_indexed_json
方法的目的是为您的文档/模型定义JSON序列化 。
默认的to_indexed_json
方法确实使用您的映射定义,仅使用映射中定义的属性 – 基于如果您足够关注定义映射 ,默认情况下Tire仅索引具有已定义映射的属性。
现在,当您想要紧紧抓住模型实际上如何序列化为弹性搜索的 JSON时,您只需定义自己的to_indexed_json
方法(如README指示)。
这个自定义MyModel#to_indexed_method
通常不关心映射定义,并且从头开始构建JSON序列化(通过利用ActiveRecord的to_json
,使用jbuilder等JSON构建器,或者只构建一个普通的旧Hash并调用Hash#to_json
)。
因此,要回答问题的最后部分,使用mapping
和to_indexed_json
绝对不会产生任何冲突,实际上需要在to_indexed_json
中使用高级function。
总结一下:
- 您可以使用
mapping
方法为搜索引擎定义模型的映射 - 您可以使用自定义
to_indexed_json
方法来定义搜索引擎查看文档/模型的方式。