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 文档时,我的印象是您应该使用mapping
或to_indexed_json
方法,因为(我的理解是......)mapping
用于提供to_indexed_json
.
问题是,我找到了一些同时使用两者的教程。为什么?
基本上,我的应用程序现在可以与 to_indexed_json
一起使用,但我不知道如何设置某些属性的提升值(因此我开始研究映射的原因),我想知道是否同时使用两者会产生一些冲突。
【问题讨论】:
【参考方案1】:虽然mapping
和to_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
)。
因此,要回答您问题的最后一部分,同时使用 mapping
和 to_indexed_json
绝对不会产生任何冲突,实际上是在 elasticsearch 中使用高级功能所必需的。
总结一下:
-
您使用
mapping
方法为搜索引擎定义模型的映射
您使用自定义 to_indexed_json
方法来定义搜索引擎如何查看您的文档/模型。
【讨论】:
如果我想为单个模型设置 2 个不同的索引怎么办。如何定义两个索引? 目前轮胎中的单个模型不能有两个单独的索引。 谢谢,非常清楚。所以to_indexed_json
方法的结果应该在搜索结果的_source
元素中?以上是关于ElasticSearch & Tire:使用映射和 to_indexed_json的主要内容,如果未能解决你的问题,请参考以下文章
[ACM-ICPC 2018 沈阳网络赛] G. Spare Tire (思维+容斥)
Elasticsearch和Tyre Gem:“IndexMissingException [[products] missing]”?