【发布时间】:2015-09-05 17:35:24
【问题描述】:
我将不同类型的文档存储在具有严格预定义映射的单个索引中。它们都有一些字段(比如“body”),但我希望在索引时对它们进行稍微不同的分析(例如,对特定文档使用不同的标记过滤器)并在搜索时以相同的方式处理。据我所知,不能为每个文档指定分析器。
我也考虑过使用:
- 对象字段具有针对文档类型的不同分析子字段,因此每个文档只有一个填充的子字段(例如,“body.mail”、“body.html”)。问题是我无法搜索整个“正文”字段,该字段将查看其所有子字段(以免破坏现有应用程序)。
- 多字段的新转世(在“正文”字段中使用通用分析器并在其中自定义分析“邮件”、“html”等)。但是,我不确定是否可以在索引时直接使用它们,而在搜索时间接使用它们(例如,用
{"mail":"smth"}保存对象以使用特定的索引分析器,然后通过"query":{"body":"smth"}搜索以使用通用搜索分析器)。 - 要将“正文”分成具有不同映射的多个字段,请将它们从
_all中删除,并将copy_to设置为单个body字段。我不确定,但由于复制,它会增加大量索引开销。
【问题讨论】:
-
为什么不索引“mail”、“html”等不同的字段,为每个字段设置不同的分析器,并使用多重匹配查询来搜索所有这些字段? elastic.co/guide/en/elasticsearch/reference/current/…
-
在我看来,这两个要求不可能同时出现:
search on the whole "body" field which would look through all its subfields (**to not break the existing application**)和analyzed slightly differently when indexed and treaten the same way while searched。必须付出一些。 -
@Ita Legacy 原因。该字段上已经有很多搜索查询,因此用多重匹配替换每个查询会很困难且容易出现样板。
-
"
copy_toto a singlebodyfield" 将使用body字段的分析器,因此,即使您在内部有copy_to的字段上有不同的分析器body您将获得由body字段分析器分析的文本。