Elasticsearch 6.6.0
Отображение:
var settings = new ConnectionSettings(new Uri(url))
.DefaultMappingFor<OrderDocSearch>(m => m.IndexName("gdocs").TypeName("docsearch"))
.DefaultMappingFor<OrderDocs>(m => m.IndexName("gdocs").TypeName("docsearch"))
.DefaultMappingFor<OrderProducts>(m => m.IndexName("gdocs").TypeName("docsearch"))
.DefaultMappingFor<OrderIndex>(m => m.IndexName("gdocs").TypeName("docsearch").RelationName("docsearch"));
Parent OrderIndex имеет два различных типа потомка, OrderDocs содержит документы с Orderи OrderProducts содержит продукты с заказом.
Данные:
OrderDocs: 1 запись
OrderProducts: 9 записей
Пример данных:
Родитель:
{
"_index" : "gdocs",
"_type" : "docsearch",
"_id" : "6715b43d-0047-4578-b298-d905f93ca913",
"_score" : 1.0,
"_routing" : "6715b43d-0047-4578-b298-d905f93ca913",
"_source" : {
"customerCode" : "100201",
"customerName" : "mmi",
"customerLocation" : "SITRA",
"contractStatus" : 1,
"contractNumber" : "101473",
"contractDate" : "2019-03-21T00:00:00",
"id" : "6715b43d-0047-4578-b298-d905f93ca913",
"oJoinField" : "docsearch"
}
}
Документы первого ребенка OrderDocs
{
"_index" : "gdocs",
"_type" : "docsearch",
"_id" : "7ddee195-b46e-418e-83e5-933123b7acf8",
"_score" : 1.0,
"_routing" : "6715b43d-0047-4578-b298-d905f93ca913",
"_source" : {
"documentKey" : "b208d146-b61d-42d4-b785-270f1ba733cb",
"documentTypeKey" : 2,
"fileName" : "FINAL INVOICE.pdf",
"fileType" : "PDF",
"mIME" : "application/pdf",
"fileSize" : 448588,
"uploadBy" : "admin",
"uploadDateTime" : "2019-05-30T08:56:36.839-04:00",
"id" : "7ddee195-b46e-418e-83e5-933123b7acf8",
"oJoinField" : {
"name" : "orderdocs",
"parent" : "6715b43d-0047-4578-b298-d905f93ca913"
}
}
First Child of OrderProducts (всего 9)
{
"_index" : "gdocs",
"_type" : "docsearch",
"_id" : "11067ab8-baf7-4a6b-996f-2c3bd7f7762a",
"_score" : 1.0,
"_routing" : "6715b43d-0047-4578-b298-d905f93ca913",
"_source" : {
"productKey" : 117739,
"productDescription" : "EGG MIX SCRAMBLED",
"gCode" : "010003",
"mfgSku" : "010003",
"customerSku" : "010003",
"contractNumber" : "1014",
"id" : "11067ab8-baf7-4a6b-996f-2c3bd7f7762a",
"oJoinField" : {
"name" : "orderproducts",
"parent" : "6715b43d-0047-4578-b298-d905f93ca913"
}
}
Поиск с помощью Nest:
var searchResponse = _elasticClient.Search<OrderDocs>(s => s.Index("globaldocs")
.Query(q => q
.HasParent<OrderIndex>(c => c
.Query(cq => cq.Match(m => m.Field(t => t.CustomerName).Query("xyz"))))));
Теперь я хочу найти OrderDocs на основе любого совпадения с родителем [OrderIndex] или любого совпадения с братьями и сестрами [OrderProducts].
Запрос выше Nestвозвращает всего 10 записей.Он должен возвращать только 1, поскольку у меня есть только одна запись OrderDocs.
Кто-нибудь может подсказать, где мне не хватает?
Кроме того, если я хочу найти ребенка, используя других братьев и сестер, как писать?