2016-01-06 51 views
0

我有一个用例,它有点类似于dynamic_template的ES示例,其中我想要分析某些字符串,而不是某些字符串。ES自定义动态映射字段名称更改

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

  • 我(目前使用进口logstash同一个数据库,)
  • 我的文档中调整名称抢输入文件从DB
  • 我抢approrpiate模式因此(使用logstash的红宝石突变):
    • 如果没有分析我不改名字
    • 如果分析我将其更改为ORIGINALNAME_analyzed

这将处理分析感谢/ not_analyzed问题dynamic_template我确定,但现在用户不知道哪些字段进行分析,以便有没有简单的方法为他写的查询,因为他不知道这个领域的名字是什么。

我想使用字段名称别名,但显然ES不支持它们。是否有任何其他机制我错过了我可以在这里使用像索引后的字段重命名或其他?

例如this ancient thread提到field.sub.name可以查询刚刚name但我猜测,当他们禁止在名称.前一段时间,因为我无法得到它的工作这种情况已经改变?

回答

1

让用户只用原始名称创建查询。我相信你有一些代码可以将这个用户查询转换成Elasticsearch查询。转换为Elasticsearch查询时,不要使用用户单独提供的字段名称,而应使用字段名称ORIGINALNAME以及ORIGINALNAME_analyzed。如果您正在使用match查询,请将其转换为multi_match。如果您正在使用term查询,请将其转换为boolshould查询。我想你会得到我要去的地方。

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

+0

是啊这就是我现在正在做的 - 其实我也在ES中存储名称映射,所以我可以很容易地得到自己的实际名称,只是希望有内置的东西:-) –

+0

你只使用'multi_match'查询? – bittusarkar

+0

实际上我使用了很多不同类型的查询和聚合。开始认为分析所有字符串字段并用它来完成可能更简单:-) –