Я использую Elasticsearch.Net и NEST в приложении и имею проблемы с доступом к документам в индексе Elasticsearh при поиске на основе идентификаторов вложенных объектов. Структура данных - это счет-фактура -> lineItems -> rowItems. Я хочу искать на основе этих идентификаторов rowItems. (Упрощенный) отображение индекса:Запрос Elasticsearch.Net с использованием NEST и вложенных объектов для извлечения документов
"invoice": {
"properties": {
"lineItems": {
"properties": {
"accountId": {
"index": "not_analyzed",
"type": "string"
},
"listItems": {
"properties": {
"itemName": {
"analyzer": "str_index_analyzer",
"term_vector": "with_positions_offsets",
"type": "string",
"fields": {
"raw": {
"analyzer": "str_search_analyzer",
"type": "string"
}
}
},
"listItemID": {
"index": "not_analyzed",
"type": "string"
}
}
}
}
}
}
}
И когда я делаю поиск смысла в хроме одной из вложенных объектов, я могу успешно получить его:
POST /_search
{
"query": {
"bool": {
"should": [
{"match": {
"lineItems.rowItems.rowItemID" : "23f2157f-eb21-400d-b3a1-a61cf1451262"
}}
]
}
}
}
который возвращает тип документа Счет со всеми его подробностями.
Я играл с кодом, чтобы сделать это, используя NEST, но до сих пор не удалось. У меня есть список rowItemIds, и я хочу получить все документы-фактуры, которые имеют точное совпадение с этими идентификаторами. Это то, что я в настоящее время:
var result = Execute(client => client.Search<Invoice>(s => s
.Aggregations(a => a
.Nested("my_nested_agg", n => n
.Path("lineItems")
.Aggregations(aa => aa
.Filter("my_avg_agg", avg => avg
.Field(p => searchIds.Contains(p.LineItems.First().RowItems.First().TrackingItemID))
)
)
)
)
));
Где searchIds список rowItemIds Я ищу. Вышеприведенный код совершенно неверен, и я не знаком с синтаксисом о том, как это сделать. Любая помощь будет принята с благодарностью.
Я заметил здесь: http://stackoverflow.com/questions/29346935/elasticsearch-nested-object-under-path-is-not-of-nested-type , что вложенное ключевое слово необходимо для выполнения вложенных поисков, таких как: «type»: «inested» Возможно ли найти эти идентификаторы без этого (чего у меня нет). Кроме того, весь реиндекс не является опцией в настоящий момент задержек в системе. – CorribView