Отображение для ограничения длины типа данных Array в Elasticsearch - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь создать сопоставлениеasticsearch, которое ограничивает длину типа данных массива x количеством элементов.

mapping = """
{
"mappings": {
        "document": {
            "properties": {
                "pages": {
                    "type": "text"
               }
            }
        }
    }
}
}
"""

в этом случае, как мне установить массив "pages", чтобымаксимум 1000 элементов списка?Кроме того, есть ли способ "игнорировать" ошибки вставки, вызванные ES, когда этот предел достигнут?

Ответы [ 2 ]

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

Спасибо, Хонза!

Я предположил, что в конечном итоге ... чтобы расширить ваш ответ, вот как я сейчас вставляю / индексирую документы:

data = {
            "_op_type": "index",
            "_index" : "myIndex",
            "_type" : "document",
            'script' : {
                'inline': 'if(ctx._source.pages.length < 1001){ ctx._source.pages.add(params.page);}',
                'params' : {
                    "page" : "{}".format(item['page'])
                }
            }   
        }

Я использую поле скрипта в сочетании с «безболезненным» языком для проверки длины поля перед индексацией документа.

Обратите внимание, что в приведенном выше примере я использую вспомогательный модуль библиотеки Python Elasticsearch, поэтому вы видите поле "_op_type".

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

Elasticsearch не имеет таких ограничений, вам придется применять его в своем приложении.

Что касается игнорирования ошибок, посмотрите параметр ignore_malformed для многих полей.

Надеюсь, это поможет!

...