Я использую Nest Elastic и создаю запрос для логического поиска с помощью плагина Head, я объединяю несколько запросов
Примечания о структуре БД и эластичном сопоставлении
- Каждый документ в базе данных связан с определенным идентификатором профиля, который, в свою очередь, имеет несколько атрибутов.
- Каждый документ имеет несколько значений атрибутов, связанных с ним.
В этом запросе я пытаюсь получить все документы с определенным профилем и значением атрибута> 30, имея в виду, что этот атрибут должен иметь только идентификатор атрибута 2.
SQL-запрос:
Выберите av. *, D.name из документа d атрибут внутреннего соединения Значение av на d.DocumentId = av.DocumentId, где d.profileid = 1 и av.AttributeId = 2 и av.Intvalue> 30
Эластичный запрос
{ "query": {
"bool": {
"must": [
{
"term": { "Document.profileid": "1" }
}
,
{
"term": {"Document.lstChildren.AttributeID": "2" }
}
,
{
"range": { "Document.lstChildren.IntValue": { "gt": "30"} }
}
,
{
"match_all": { }
}
],
"must_not": [ ],
"should": [ ]
}
}, "from": 0, "size": 10, "sort": [ ], "facets": { }
}
Проблема
Результат также содержит документ со следующими значениями атрибутов
- Значение атрибута = 3 и attributeId = 2 (значение ‹30)
- Значение атрибута = 34, но с attributeId, отличным от 2 (неверно)
Этот документ нельзя включать, так как он мне не подходит.
Как я могу построить этот запрос?
"match_all": {}
запрос из вашегоmust
списка? Это совершенно не нужно, и я не удивлюсь, если из-за этого выскочит какая-нибудь ошибка. - person Sam   schedule 22.12.2015match_all": {}
не решил проблему - person Hussein Salman   schedule 22.12.2015lstChildren
вложенным объектом. Затем использование вложенного запроса обеспечит выполнение всех указанных условий. - person Hussein Salman   schedule 24.12.2015