У меня есть документы в следующем формате:
{
"id": number
"chefId: number
"name": String,
"ingredients": List<String>,
"isSpecial": boolean
}
Вот список из 5 документов:
{
"id": 1,
"chefId": 1,
"name": "Roasted Potatoes",
"ingredients": ["Potato", "Onion", "Oil", "Salt"],
"isSpecial": false
},
{
"id": 2,
"chefId": 1,
"name": "Dauphinoise potatoes",
"ingredients": ["Potato", "Garlic", "Cream", "Salt"],
"isSpecial": true
},
{
"id": 3,
"chefId": 2,
"name": "Boiled Potatoes",
"ingredients": ["Potato", "Salt"],
"isSpecial": true
},
{
"id": 4,
"chefId": 3
"name": "Mashed Potatoes",
"ingredients": ["Potato", "Butter", "Milk"],
"isSpecial": false
},
{
"id": 5,
"chefId": 4
"name": "Hash Browns",
"ingredients": ["Potato", "Onion", "Egg"],
"isSpecial": false
}
Я буду выполнять поиск, где "Картофель" содержится вполе имени.Например:
{
"query": {
"wildcard": {
"status": {
"value": "*Potatoes*"
}
}
}
}
Но я также хочу добавить некоторые дополнительные критерии при возврате документов:
- Если ингредиенты содержат лук или молоко, верните документы.Таким образом, документы с id 1 и 4 будут возвращены.Обратите внимание, что это означает, что у нас есть документы, возвращенные с идентификаторами шеф-поваров 1 и 3.
- Затем, для документов, где у нас еще нет другого документа с таким же идентификатором шеф-повара, возвращаем, где установлен флаг isSpecialк истине.Таким образом, только документ 3 будет возвращен.2 не будет возвращено, поскольку у нас уже есть документ, в котором идентификатор шеф-повара равен единице.
Можно ли создать такой тип цепочки в Elasticsearch?Я хотел бы иметь возможность сделать это в одном запросе, чтобы избежать добавления логики в мой (Java) код.