Я использую Nest Упругие и построение запроса для логического поиска с помощью Head плагин, я комбинируя несколько запросовNest ElasticSearch: Boolean Поиск с помощью вложенных запросов и вложенных объектов
Заметки о DB структуры и упругих карт
- Каждый документ в базе данных связан с конкретной ProfileID который в свою очередь, имеет несколько атрибутов
- Каждый документ имеет несколько атрибутов V связанные с ним
В этом запросе я пытаюсь получить все документы с определенным профилем и значением атрибута> 30, имея в виду, что этот атрибут должен иметь только атрибут Id 2.
SQL-запросов:.
Выберите ау *, d.name из документа г внутреннее соединение AttributeValue аи на 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, но с атрибутомId, отличным от 2 (неверно)
Этот документ не должен быть включен поскольку это не удовлетворяет мои потребности.
Как я могу построить этот запрос?
Можешь вы разделяете образец документ и отображение индекса ? – Rob
Можете ли вы попытаться удалить запрос '' match_all ": {}' из списка 'must'? Это совершенно не нужно, и я не удивлюсь, если из-за этого появится ошибка. – Sam
@Sam 'match_all": {} 'не решила проблему – Coding