Я относительно новичок в ElasticSearch, и мне нужен совет. После нескольких попыток я не нашел решение, и именно поэтому я вам нужен.Условный запрос в ElasticSearch?
Я хочу сделать условный запрос на основе содержимого документа.
Позвольте мне объяснить, у меня есть эти документы в ES:
{
"name": "Product n°1",
"type": "Mail",
"sub": "Letter"
},
{
"name": "Product n°2",
"type": "Video",
"sub": null
},
{
"name": "Product n°3",
"type": "Mail",
"sub": "Postcard"
}
Пользователь может фильтровать по типам и подразделам с флажками (так, пользователь может искать более одного типа и к югу, в то же время)
Edited
Клиенты могут выбирает с флажком типы продуктов, которые они хотят получить от ES (для Ex: видео, изображения, почта), они могут выбрать все из них.
Тип «Документ» имеет 4 подтипа: Letter, Postal Card, Paper, Printed, и они могут выбирать, какой тип субтитров они хотят получить.
Итак, мы признаем клиента выбранным видео и почтой, а Letter - подтипом Mail.
Я хочу, чтобы ES возвращал все документы в выбранных типах и только буквы, когда документ является типом «Почта».
Извините за свои ошибки, я очень новичок в ES.
Спасибо всем, кто пытается помочь!
UPDATE 2
Вот мой запрос с решением Андрея Стефана
{
"query": {
"filtered": {
"query": {
"match_all": []
},
"filter": {
"bool": {
"should": [
{
"terms": {
"type": [
"Video",
"Mail"
]
}
},
{
"bool": {
"must": [
{
"term": {
"type": Mail
}
},
{
"terms": {
"sub": [
"Letters"
]
}
}
]
}
}
]
}
}
}
}
}
ES возвращает все документы типа видео и почты, он не применяет fillter Letters, когда тип это Mail.
Вы можете перефразировать или предоставить более подробную информацию о «Я хочу, чтобы сделать условный запрос вроде этого: Я хочу, чтобы получить продукты, имеющие 1 или 2 в типе, но если документ имеет тип 1 Пусть я хочу извлекать только документы, имеющие 2 в sub. "? –
я уверенный может. К сожалению, для моего английского языка. Не мой родной язык. – ChainList
Хорошо, я попытался проясниться, надеюсь, вы поймете. – ChainList