使用不同的分析器为字符串列表指定多字段

时间:2018-05-15 20:12:18

标签: elasticsearch

我有一个带有属性aliases的文档,它是一个字符串列表。我想根据该列表指定多字段,以便我可以使用适当的语言分析进行搜索。

但是使用这种映射:

'names':{
    'type':'object',
    'fields': {
        'native': {
            'type': 'text', <- I guess this doesn't even make sense
            'analyzer': 'en'
        }
    }
}

可以实现吗?我知道有可能有动态映射,但我不知道如何在这个问题中使用它。我还阅读了有关嵌套对象的文档,它接近给我一个解决方案,但它不是一个完美的契合,除非我将每个字符串变成一个对象。

1 个答案:

答案 0 :(得分:0)

TL; DR

字符串数组的映射方式与常规文本相同。这意味着在映射中您只需指定'type': 'text'而不是'type':'object',一切都按预期工作。

原理

有关数组的文档包含以下文本框:

  

所有字段类型都支持开箱即用的多值字段,这是Lucene起源的结果。 Lucene旨在成为一个全文搜索引擎。为了能够在一大块文本中搜索单个单词,Lucene将文本标记为单个术语,并将每个术语分别添加到反向索引中。

     

这意味着即使是简单的文本字段也必须能够默认支持多个值。当添加其他数据类型(例如数字和日期)时,它们使用与字符串相同的数据结构,因此可以免费获得多值。

事实上,如果您只是创建一个包含字符串数组的文档并且GET动态创建了映射,您将看到类似于

的内容。
{'fields': {'keyword': {'ignore_above': 256, 'type': 'keyword'}},
            'type': 'text'}

与常规文本字段相同。