Elasticsearch - можно ли определить индексный анализатор времени на уровне документа? - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу индексировать страницы на нескольких языках в один индекс. Но для каждого языка мне нужно определить собственный анализатор языка. Таким образом, для страницы engli sh она будет использовать анализатор engli sh, для страницы на чешском языке она будет использовать анализатор чешского языка.

Во время поиска я бы установил правильный анализатор на основе текущей локали, поскольку мне не нужно поиск по языкам.

Похоже, что это было возможно в ранних версиях Elasticsearch, но я не могу найти способ сделать это в 7.6

Есть ли способ достичь этого или я действительно нужно создать индекс для каждого типа на каждом языке? Это привело бы ко многим индексам с небольшим числом проиндексированных документов.

Или есть лучший способ справиться с этим сценарием? Мы рассматриваем около 20 языков и несколько типов документов (насколько я понимаю, типы теперь устарели, поэтому каждому нужен свой собственный индекс).

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать функцию полей , которая доступна в Elasti c 7.6, которая позволяет хранить разные языки в одном индексе, а также во время запроса можно будет просто использовать подполе языка, который вы хотите запросить.

На самом деле, существует хороший официальный блог от elasti c, в котором говорится о различных подходах к многоязычному поиску и подходу, которые я дал, вдохновленный тем, что называется пер. поиск по языку на основе полей.

Пример

Пример отображения индекса будет выглядеть ниже

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