ES自定义动态映射字段名称更改

时间:2016-01-06 08:29:23

标签: elasticsearch

我的用例有点类似dynamic_template的ES示例,我想要分析某些字符串,而不是。

我的文档字段没有这样的约定,并且基于外部模式做出决定。所以目前我的流程是:

  • 我从数据库中获取输入文档
  • 我抓住了approrpiate架构(相同的数据库,目前使用 logstash 进行导入)
  • 我相应地调整了文档中的名称(使用logstash' ruby​​ mutator):
    • 如果没有分析,我不会更改名称
    • 如果分析我将其更改为ORIGINALNAME_analyzed

由于我设置了dynamic_template,这将处理已分析/未分析的问题,但现在用户并不知道哪些字段被分析,因此他没有简单的方法来编写查询,因为他没有这样做。不知道该字段的名称是什么。

我想使用字段名称别名,但显然ES并不支持它们。是否还有其他我缺少的机制我可以在索引之后使用字段重命名等其他机制?

例如this ancient thread提到field.sub.name只能被name查询,但是当我们在名称中禁用.时,我猜这已经改变了因为我不能让它起作用?

1 个答案:

答案 0 :(得分:1)

让用户只使用原始名称创建查询。我相信你有一些代码可以将这个用户查询转换为Elasticsearch查询。转换为Elasticsearch查询时,不使用用户单独提供的字段名称,而是使用字段名称ORIGINALNAMEORIGINALNAME_analyzed。如果您使用match查询,请将其转换为multi_match。如果您使用term查询,请将其转换为bool should查询。我想你会得到我的目标。

如果字段不存在,Elasticsearch不会介意。如果已经在其原始名称中附加了_analyzed的字段,则可能会出现问题。但也有一些技巧可以解决。