Как использовать конвейеры загрузки на уже проиндексированных документах? - PullRequest
2 голосов
/ 24 мая 2019

Я использую FOSElasticaBundle для индексации моих документов (которые являются сущностями из проекта Symfony, которые хранятся в БД через Doctrine) в Elastic Search.FOSElastica выполняет автоматическое сопоставление и индексирование после этого всех документов.

Проблема в том, что есть некоторые действия, которые я хотел бы применить к каждому документу (к уже проиндексированным и к тем, которые будут после), поэтому конвейеры ибезболезненное, кажется, хорошее решение.

Но я не могу понять, как применить конвейер к уже проиндексированным документам, у вас есть идея, как?

I 'Мы видели, что вы можете добавить «pipe = my_pipeline_name» после запроса ES, но вы можете сделать это для одного документа, в то время как я бы хотел, чтобы он влиял на все документы.

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Вы можете использовать Конвейер при перемещении данных из один индекс в другой индекс .

Вам потребуется использовать Reindex API , чтобы он выполнялся на данных во время его movement/ingestion_process из одного индекса в другой.

Примечание: Это операция уровня индекса , означающая, что она повлияет на все документов.

Ниже приведено краткое описание шагов:

  • Создание temporary_index,
  • Переиндексация с source_index до temporary_index использовать Reindex API .Также включает конвейер (пример запроса приведен ниже)
  • Удалите и заново создайте source_index.Убедитесь, что сопоставления также включены при создании индекса.
  • Выполните тот же запрос, используя source_index в качестве имени назначения и temporary_index в качестве имени источника без конвейера

Ниже описано, как использовать Reindex API с конвейером

POST _reindex
{
  "source": {
    "index": "source_index_name"
  },
  "dest": {
    "index": "temporary_index",
    "pipeline": "some_ingest_pipeline"
  }
}

Дайте мне знать, если это поможет!

0 голосов
/ 01 июля 2019

Итак, через некоторое время я нашел способ более эффективного решения своих проблем: Динамические шаблоны и Шаблоны индексов

У меня фактически были проблемы с тем, что ElasticSearch не распознавал некоторые типы полей (например, date или geo_point), поэтому я принудительно заставил их использовать поля с определенными именами с помощью шаблонов.

Если вам нужен пример моей конфигурации в FOSElastica ( документ здесь ):

fos_elastica:
    serializer: 
        serializer: jms_serializer
    clients:
        default: 
            host: localhost 
            port: 9200
    index_templates: # https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices-templates.html
        base_template: # this is a custom name for the index template
            client: default
            template: "*" # this is where you define which indices will use this template
            types:
                _doc: # this is where you define which types will use this (_doc stands for every type/documents)
                    dynamic_templates: # https://www.elastic.co/guide/en/elasticsearch/reference/6.8/dynamic-templates.html
                        dynamic_date_template: # this is a custom name for the dynamic field template
                            match_pattern: regex
                            match: created|updated|tpq_date|taq_date
                            mapping:
                                type: date
                        dynamic_location_template:
                            match: location
                            mapping:
                                type: geo_point
...