Я нашел запись в блоге от https://ambar.cloud/blog/2017/01/02/es-large-text/, которая может ответить на ваш вопрос. Есть подробный пример, похожий на ваш.
ElasticSearch может работать с большими документами и при этом обеспечивать высокую производительность, но для таких случаев, как ваш, важно правильно настроить индекс.
Предположим, у вас есть документы ElasticSearch с текстовым полем объемом от 3 до 5 страниц текста.
При попытке запросить документы, содержащие абзац в большом текстовом поле, ElasticSearch выполнит поиск по всем терминам во всех документах и их полях, включая большое текстовое поле.
Во время слияния ElasticSearch собирает все найденные документы в память, включая большое текстовое поле. После встраивания результатов в память ElasticSearch попытается отправить эти большие документы в виде одного ответа JSON. Это очень много с точки зрения производительности.
ElasticSearch должен обрабатывать большое текстовое поле отдельно от других полей. Для этого в отображении индекса необходимо установить параметр store:true
для большого текстового поля. Это говорит ElasticSearch хранить поле отдельно от полей другого документа. Вы также должны исключить большое текстовое поле из _source
, добавив этот параметр в настройках индекса:
_source: {
excludes: [
"your_large_text_field"
]
}
Если вы настроите свои индексы таким образом, большое текстовое поле будет отделено от _source
. Запросы к большому текстовому полю теперь намного эффективнее, поскольку он хранится отдельно и нет необходимости объединять его с _source
.
В заключение, да, ElasticSearch может обрабатывать поиск больших текстовых полей и с некоторыми дополнительными настройками может повысить производительность поиска в 1100 раз .