ElasticSearch包装索引类型

时间:2014-10-24 18:53:51

标签: elasticsearch

我现在正在研究弹性搜索,我很难掌握索引类型如何适应数据模型,我已经阅读了示例和文档,但没有真正深入或示例似乎使用数据由几个子模型组成的模型。

我目前正在使用mongodb来存储我的数据,让我们以一个文章集合为例,我希望将其编入搜索索引,我的文档看起来像这样:

Article = {
    title: String,
    publisher: String,
    subject: String,
    description: String,
    year: Integer,
}

现在我希望每个字段都可以搜索,所以我会制作一个弹性搜索索引“文章”。我需要定义每个字段以及如何分析它以及是否存储,我理解。

现在索引类型是如何进入的?据我所知,Lucene没有这个概念,这是Elasticsearch添加的一个层。

例如,也许有些人可能会说我们可以按主题或发布者对文档进行逻辑分组,并在这些文档上创建索引类型,但这与主题或发布者的搜索有何不同?

我们有索引类型更多是与性能相关的方面吗?

2 个答案:

答案 0 :(得分:0)

不是一个很容易回答的问题,但我会尝试一下。但请注意我的意见。

首先,如果您不想将某些文档保存在索引中,只是因为感觉它们应该存在,请创建单独的索引。在更多类型上使用更多索引并没有真正的惩罚。我唯一能想到的是你可以创建可以在不同类型上重用的分析器和映射。

如果您认为文档属于一起,您可以使用类型,它们具有相似的结构但不必具有相同的结构。但请注意,不要为同一索引中不同类型的同名字段创建单独的映射。 Lucene不喜欢这个。

与最终场景相比,在父子关系中,您需要类型。通过这种方式,父母和他们的孩子可以放在同一个分片中,这样可以提高性能。

希望有所帮助。

答案 1 :(得分:0)

如果我没有弄错的话,在一个索引中使用多个数据类型的捕获几乎与使用不同的索引相同。比如,您可以在同一索引“地址”中存储(就像我所做的)类型为“simple_address”,“delivery_address”,“some_strange_but_official_address_info”的文档,以使您的代码更加清晰。但是如果你不使用父子链接,它就相当于只有三个索引。

说到你的例子,你应该围绕你想要搜索的内容。例如,如果你在方程中添加注释,最好使用某种分离 - 作为父子或不同的索引与按键手动映射。而且,显然,您应该为“Article”和“Comment”类型设置不同的映射。