Elasticsearch - 我可以在文档级别定义索引时间分析器吗?

Elasticsearch - can I define index time analyzer on document level?

我想将多种语言的页面编入一个索引。但是对于每种语言,我都需要定义自定义语言分析器。所以对于英语页面,它将使用英语分析器,对于捷克语页面,它将使用捷克语分析器。

在搜索时,我会根据当前语言环境设置正确的分析器,因为我不需要跨语言搜索。

在 Elasticsearch 的早期版本中似乎是可行的,但我在 7.6 中找不到实现它的方法

有没有办法实现这个,或者我真的需要为每种语言的每种类型创建一个索引吗?这将导致许多索引只有少量索引文档。

或者有更好的方法来处理这种情况吗?我们正在考虑大约 20 种语言和几种文档类型(据我了解,现在不推荐使用类型,因此每种类型都需要自己的索引)。

您可以使用 Elastic 7.6 中提供的 fields feature,它允许您将不同的语言存储在一个索引中,查询时也可以只使用您选择的语言的子字段想查询。

事实上,有一个 nice official blog from elastic 在谈论进行多语言搜索的不同方法,我给出的方法的灵感来自于所谓的基于字段的语言搜索。

例子

示例索引映射如下所示

{
    "mappings": {
        "properties": {
            "title": {
                "type": "text",
                "analyzer": "english",
                "fields": {
                    "fr": {
                        "type": "text",
                        "analyzer": "french"
                    },
                    "es": {
                        "type": "text",
                        "analyzer": "spanish"
                    },
                    "estonian": {
                        "type": "text",
                        "analyzer": "estonian"
                    }
                }
            }
        }
    }
}