2016-01-06 4 views
0

У меня есть пример использования, который немного похож на пример ES dynamic_template, где я хочу, чтобы определенные строки анализировались, а некоторые нет.Изменение имени поля пользовательского динамического сопоставления ES

В моих полях документа нет такого соглашения, и решение принимается на основе внешней схемы. Так в настоящее время мой поток:

  • Я хватаю документ входы от DB
  • Я захватить approrpiate схему (ту же базу данных, в настоящее время с помощью logstash для импорта)
  • я настроить имя в документе соответственно (с использованием рубинового мутатора logstash в):
    • если не анализировался я не меняю имя
    • если я проанализировал изменения его ORIGINALNAME_analyzed

Это будет обрабатывать анализируемую/not_analyzed проблемы благодаря dynamic_template я поставил, но теперь пользователь не знает, какие поля анализируются так что нет простого способа для него, чтобы писать запросы, потому что он не знает, как называется поле.

Я хотел использовать псевдонимы полей, но, по-видимому, ES их не поддерживает. Есть ли какие-либо другие механизмы, которые я пропускаю, я мог бы использовать здесь, как переименование поля после индексации или что-то еще?

Например this ancient thread упоминает, что field.sub.name может быть запрошен как только name, но я предполагаю, что это изменилось, когда они запрещены . во имя некоторое время назад, так как я не могу заставить его работать?

ответ

1

Позвольте пользователю создавать запросы только с оригинальным именем. Я считаю, что у вас есть код, который преобразует этот запрос пользователя в запрос Elasticsearch. При преобразовании в запрос Elasticsearch вместо использования имени поля, предоставленного пользователем, используйте как имена полей ORIGINALNAME, так и ORIGINALNAME_analyzed. Если вы используете запрос match, преобразуйте его в multi_match. Если вы используете запрос term, преобразуйте его в запрос boolshould. Я предполагаю, что вы пойдете туда, куда я собираюсь.

Elasticsearch не будет возражать, если поле не существует. Это может быть проблемой, если уже есть поле с _analyzed, указанное в его первоначальном названии. Но с некоторыми трюками, которые могут быть исправлены тоже.

+0

Да, вот как я это делаю сейчас - на самом деле я также храню сопоставление имен в ES, поэтому я могу легко получить себе настоящее имя, просто надеялся, что есть что-то встроенное :-) –

+0

Вы используете только 'multi_match' запросы? – bittusarkar

+0

На самом деле я использую довольно много разных типов запросов и агрегаций. Начав думать, что было бы проще просто проанализировать все строковые поля и сделать с ним :-) –

Смежные вопросы