本文介绍了ElasticSearch&轮胎:使用Mapping和to_indexed_json的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



问题是,我发现一些使用两个教程。为什么?



基本上,我的应用程序现在使用 to_indexed_json ,但我无法弄清楚如何设置某些属性的增强值(因此我开始关注映射的原因),我想知道如果使用两者会产生一些冲突。

解决方案

虽然映射 to_indexed_json 方法相关,实际上它们有两个不同的目的。



映射的目的 方法是为索引中的文档属性定义映射。您可能希望将某些属性定义为not_analyzed,因此它不会分解为令牌,或为属性设置特定的分析器,或(正如您所提到的)索引时间 boost multiield 属性,日期类型的自定义格式等。



映射然后使用例如。当轮胎自动。



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



使用您的映射定义,仅使用映射中定义的属性 - 基于如果您足够关心定义映射,则默认情况下,轮胎仅索引具有定义映射的属性。 / p>

现在,当您想要紧紧抓住您的模型实际上如何序列化为JSON for 时,您只需定义自己的 to_indexed_json 方法(如README指示)。



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



所以,回答你的问题的最后一部分,使用映射 to_indexed_json 绝对不会创建任何冲突,实际上需要在弹性搜索中使用高级功能。



总结:


  1. 您可以使用映射方法来定义搜索引擎的模型映射

  2. 您可以使用自定义 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.

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.

解决方案

While the mapping and to_indexed_json methods are related, they serve two different purposes, in fact.

The purpose of the mapping method is to define mapping for the document properties within an index. 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. 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.

The purpose of the to_indexed_json method is to define a JSON serialization for your documents/models.

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.

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).

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).

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.

To sum up:

  1. You use the mapping method to define the mapping for your models for the search engine
  2. You use a custom to_indexed_json method to define how the search engine sees your documents/models.

这篇关于ElasticSearch&轮胎:使用Mapping和to_indexed_json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 05:07