[英]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文档时,我的印象是您应该使用
mapping
或to_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. 虽然
mapping
和to_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. 因此,要回答问题的最后一部分,同时使用
mapping
和to_indexed_json
绝对不会产生任何冲突,实际上,在to_indexed_json
中使用高级功能实际上是必需的。
To sum up: 总结一下:
mapping
method to define the mapping for your models for the search engine mapping
方法为搜索引擎定义模型的映射 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.