简体   繁体   English

ElasticSearch和Tire:使用Mapping和to_indexed_json

[英]ElasticSearch & Tire: Using Mapping and to_indexed_json

While reading the Tire doc, I was under the impression that you should use either mapping or to_indexed_json methods, since (my understanding was..) the mapping is used to feed the to_indexed_json . 在阅读Tyre文档时,我的印象是您应该使用mappingto_indexed_json方法,因为(我的理解是。) mapping用于馈送to_indexed_json

The problem is, that I found some tutorials where both are used. 问题是,我找到了一些同时使用两者的教程。 WHY? 为什么?

Basically, my app works right now with the to_indexed_json but I can't figure out how to set the boost value of some of the attributes (hence the reason I started looking at mapping) and I was wondering if using both would create some conflicts. 基本上,我的应用程序现在可以与to_indexed_json一起使用,但是我不知道如何设置某些属性的提升值(因此我开始查看映射的原因),我想知道同时使用这两个属性是否会产生一些冲突。

While the mapping and to_indexed_json methods are related, they serve two different purposes, in fact. 虽然mappingto_indexed_json方法是相关的,但实际上它们有两个不同的用途。

The purpose of the mapping method is to define mapping for the document properties within an index. mapping方法的目的是为索引内的文档属性定义映射 You may want to define certain property as "not_analyzed", so it is not broken into tokens , or set a specific analyzer for the property, or (as you mention) indexing time boost factor. 您可能希望将某些属性定义为“ not_analyzed”,这样就不会将其分解为令牌 ,也不会为该属性设置特定的分析器,或者(如您提到的)索引时间提升因子。 You may also define multifield property, custom formats for date types, etc. 您还可以定义多字段属性, 日期类型的自定义格式等。

This mapping is then used eg. 然后使用该映射 when Tire automatically creates an index for your model . Tire自动为您的模型创建索引时

The purpose of the to_indexed_json method is to define a JSON serialization for your documents/models. to_indexed_json方法的目的是为您的文档/模型定义JSON序列化

The default to_indexed_json method does use your mapping definition, to use only properties defined in the mapping — on a basis that if you care enough to define the mapping , by default Tire indexes only properties with defined mapping. 默认的to_indexed_json方法确实使用您的映射定义,仅使用在映射中定义的属性-基于这样的基础,即如果您足够定义映射 ,则默认情况下Tire只会索引已定义映射的属性。

Now, when you want a tight grip on how your model is in fact serialized into JSON for elasticsearch , you just define your own to_indexed_json methods (as the README instructs). 现在,当你想在你的模型如何,其实是序列化为JSON用于elasticsearch得紧,你刚才定义自己的to_indexed_json方法(如README指示)。

This custom MyModel#to_indexed_method usually does not care about mapping definition, and builds the JSON serialization from scratch (by leveraging ActiveRecord's to_json , using a JSON builder such as jbuilder , or just building a plain old Hash and calling Hash#to_json ). 这个自定义的MyModel#to_indexed_method通常不关心映射定义,而是从头开始构建JSON序列化(通过使用ActiveRecord的to_json ,使用jbuilder之类的JSON构建器,或者只是构建一个普通的旧Hash并调用Hash#to_json )。

So, to answer the last part of your question, using both mapping and to_indexed_json will absolutely not create any conflicts, and is in fact required to use advanced features in elasticsearch. 因此,要回答问题的最后一部分,同时使用mappingto_indexed_json绝对不会产生任何冲突,实际上,在to_indexed_json中使用高级功能实际上是必需的。

To sum up: 总结一下:

  1. You use the mapping method to define the mapping for your models for the search engine 您使用mapping方法为搜索引擎定义模型的映射
  2. You use a custom to_indexed_json method to define how the search engine sees your documents/models. 您使用自定义的to_indexed_json方法定义搜索引擎如何查看您的文档/模型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM