Elasticsearch - Гнездо - Один патент разных видов ребенка - Как искать - PullRequest
0 голосов
/ 30 мая 2019

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.

Кто-нибудь может подсказать, где мне не хватает?

Кроме того, если я хочу найти ребенка, используя других братьев и сестер, как писать?

...