小编典典

ElasticSearch和Tire:使用Mapping和to_indexed_json

elasticsearch

在阅读 Tyre
文档时,我的印象是您应该使用mappingto_indexed_json方法,因为(我的理解是。)mapping使用来填充to_indexed_json

问题是,我找到了一些同时使用两者的教程。为什么?

基本上,我的应用程序现在可以与一起使用,to_indexed_json但是我无法弄清楚如何设置某些属性的提升值(因此,我开始查看映射的原因),我想知道同时使用这两个属性是否会产生一些冲突。


阅读 278

收藏
2020-06-22

共1个答案

小编典典

尽管mappingto_indexed_json方法是相关的,但实际上它们有两个不同的目的。

mapping 方法的目的是为索引内的文档属性定义 映射 。您可能希望将某些属性定义为“
not_analyzed”,这样就不会将其分解为 令牌 ,也不会为该属性设置特定的分析器,或者(如您提到的)索引时间 提升 因子。您还可以定义多
字段 属性, 日期 类型的自定义格式等。

然后使用该 映射 。当 Tire
自动为您的模型创建索引时

to_indexed_json 方法的目的是为文档/模型定义 JSON序列化

默认to_indexed_json方法不使用你的映射定义,只使用在映射定义的属性-
的基础上,如果你关心不够定义 的映射 ,在默认情况下 轮胎 指标只定义映射属性。

现在,当您想要严格掌握如何将模型实际序列化为JSON以进行 Elasticsearch时
,只需定义自己的to_indexed_json方法即可(如README指示)。

这个自定义MyModel#to_indexed_method通常不关心 映射
定义,而是从头开始构建JSON序列化(通过利用ActiveRecord的to_json,使用JSON构建器(例如jbuilder)或仅构建普通的旧
Hash 并调用Hash#to_json)。

因此,要回答您问题的最后一部分,请同时使用mapping和,to_indexed_json绝对 不会
造成任何冲突,实际上,在Elasticsearch中使用高级功能实际上是必需的。

总结一下:

  1. 您使用该mapping方法为搜索引擎定义模型的映射
  2. 您使用自定义to_indexed_json方法定义搜索引擎如何查看您的文档/模型。
2020-06-22