Мне неизвестен подход к решению, который работает без использования скрипта. Но у вас есть выбор:
Подготовка: индексировать некоторые образцы документов
POST my_index/_bulk
{"index": {"_id": 1}}
{"color": ["red", "blue"]}
{"index": {"_id": 2}}
{"color": ["green", "yellow", "orange"]}
{"index": {"_id": 3}}
{"color": ["grey"]}
Вариант 1. Использование сценария во время запроса («дорого»)
GET my_index/_search
{
"query": {
"script": {
"script": "doc.color.size() > 1"
}
}
}
Вариант 2. Использование сценария во время индексации («дешево»)
(предпочтительный подход, поскольку сценарий выполняется только один раз для каждого документа write)
PUT _ingest/pipeline/set_number_of_colors
{
"processors": [
{
"script": {
"lang": "painless",
"source": "ctx.number_of_colors = ctx.color.size()"
}
}
]
}
POST my_index/_update_by_query?pipeline=set_number_of_colors
GET my_index/_search
{
"query": {
"range": {
"number_of_colors": {"gt": 1}
}
}
}
Вы также можете настроить конвейер как конвейер по умолчанию для вашего индекса, так что вам не нужно ничего менять в журнале приложения индексирования c.