ElasticSearch & Tire:使用映射和 to_indexed_json

Posted

技术标签:

【中文标题】ElasticSearch & Tire:使用映射和 to_indexed_json【英文标题】:ElasticSearch & Tire: Using Mapping and to_indexed_json 【发布时间】:2012-07-25 04:52:55 【问题描述】:

在阅读Tire 文档时,我的印象是您应该使用mappingto_indexed_json 方法,因为(我的理解是......)mapping 用于提供to_indexed_json .

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

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

【问题讨论】:

【参考方案1】:

虽然mappingto_indexed_json 方法是相关的,但实际上它们有两种不同的用途。

mapping 方法的目的是为索引中的文档属性定义映射。您可能希望将某些属性定义为“not_analyzed”,因此它不会被分解为 tokens,或者为该属性设置特定的分析器,或者(正如您提到的)索引时间 boost em>因素。您还可以定义 multifield 属性、date 类型的自定义格式等。

然后使用此 映射。当轮胎自动creates an index for your model.

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

default to_indexed_json method 确实使用了您的映射定义,仅使用映射中定义的属性——基于如果您足够关心定义 映射,默认情况下 Tire em> 仅索引具有定义映射的属性。

现在,当您想牢牢掌握模型实际上是如何为 elasticsearch 序列化为 JSON 时,您只需定义自己的 to_indexed_json 方法(如 README 所示)。

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

因此,要回答您问题的最后一部分,同时使用 mappingto_indexed_json 绝对不会产生任何冲突,实际上是在 elasticsearch 中使用高级功能所必需的。

总结一下:

    您使用mapping 方法为搜索引擎定义模型的映射 您使用自定义 to_indexed_json 方法来定义搜索引擎如何查看您的文档/模型。

【讨论】:

如果我想为单个模型设置 2 个不同的索引怎么办。如何定义两个索引? 目前轮胎中的单个模型不能有两个单独的索引。 谢谢,非常清楚。所以to_indexed_json 方法的结果应该在搜索结果的_source 元素中?

以上是关于ElasticSearch & Tire:使用映射和 to_indexed_json的主要内容,如果未能解决你的问题,请参考以下文章

[ACM-ICPC 2018 沈阳网络赛] G. Spare Tire (思维+容斥)

沈阳网络赛G-Spare Tire容斥

tire 学习心得

Elastic Search:如何查看索引数据

Elasticsearch和Tyre Gem:“IndexMissingException [[products] missing]”?

在 Elasticsearch 中加载自定义同义词文件时出错