Укажите мультиполе с другим анализатором для списка строк - PullRequest
0 голосов
/ 15 мая 2018

У меня есть документ со свойством aliases, представляющий собой список строк. Я хочу указать мультиполя на основе этого списка, чтобы я мог искать его с помощью соответствующего анализа языка.

Но используя это отображение:

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

Это достижимо? Я знаю, что возможно иметь динамические отображения, но я не знаю, как использовать это в этой проблеме. Я также прочитал документацию по вложенным объектам, и она близка, чтобы дать мне решение, но оно не идеально подходит, если я не превращаю каждую строку в объект.

1 Ответ

0 голосов
/ 15 мая 2018

TL; DR

Массивы строк отображаются так же, как обычный текст.Это означает, что в сопоставлении вам просто нужно указать 'type': 'text' вместо 'type':'object', и все будет работать как положено.

Обоснование

В документах по массивам есть следующее текстовое поле:

Тот факт, что все типы полей поддерживают поля с несколькими значениями из коробки, является следствием происхождения Lucene.Lucene был разработан для полнотекстовой поисковой системыЧтобы иметь возможность искать отдельные слова в большом блоке текста, Lucene разбивает текст на отдельные термины и добавляет каждый термин в инвертированный индекс отдельно.

Это означает, что даже простое текстовое поле должнобыть в состоянии поддерживать несколько значений по умолчанию.Когда были добавлены другие типы данных, такие как числа и даты, они использовали ту же структуру данных, что и строки, и получили несколько значений бесплатно.

Фактически, если вы просто создаете какой-либо документ смассив строк и GET отображение, созданное динамически, вы увидите нечто похожее на

{'fields': {'keyword': {'ignore_above': 256, 'type': 'keyword'}},
            'type': 'text'}

То же самое, что вы получите для обычного текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...