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