弹性搜索中嵌套字段的动态映射

时间:2014-05-27 08:47:33

标签: elasticsearch

示例文件:

{
   "first_name": "Uttam",
   "last_name": "Kini",
   "metadata": [
        {
           "field_type": "small_text",
           "field_value": "bla bla"
        }, 
        {
           "field_type": "large_text",
           "field_value": "bla bla bla bla bla bla bla bla"
        }, 
     ]
}

如何根据metadata.field_value动态设置metadata.field_type的映射?

例如,当metadata.field_typesmall_text时,我想使用带有关键字标记符的分析器,当metadata.field_typelarge_text时,我想使用不同的分析器。

1 个答案:

答案 0 :(得分:1)

我认为不可能直接这样做。不支持的重要原因是不可能在包含不同分析仪产品的现场外提供高质量的结果。考虑解析查询:您将在查询中使用哪个分析器来匹配由两个不同分析器生成的术语?

解决方法是使用multi-fields。您基本上为field_value创建了两个相关字段,对每个字段应用不同的映射。然后,在查询时,您构造一个具有两个分支的查询:

(field_type:small_text AND field_value.small_text:abc)
  OR (field_type:large_text AND field_value.large_text:abc)

注意:我在这里使用了查询字符串以提高可读性,您可能最好使用带有orand过滤器的过滤查询