elasticsearch как включить поле вложенного массива в поисковый запрос c#

#c# #.net #elasticsearch

#c# #.net #elasticsearch

Вопрос:

у меня есть эластичный документ, и мне нужен поиск в skillsm, полное имя электронной почты и отзывы

 "_source" : {
      "applicantId" : 73,
      "pmId" : 4,
      "jobId" : 1,
      "fullName" : "user user",
      "email" : "gmail@gmail.com",
      "phone" : "3024asfd148567",
      "resumeContentLength" : 0,
      "flag" : 0,
      "note" : "",
      "source" : "Uploaded",
      "copiedJobId" : -1,
      "skills" : "C#,Nodejs,MongoDb",
      "applyDate" : "2020-06-05T09:51:48.8870000",
      "dateLastActive" : "0001-01-01T00:00:00",
      "attachments" : [
        {
          "id" : 695,
          "fileName" : "27cd4643e2d91ac4c11997e772d3a4e7d8c.pdf",
          "contentType" : "application/pdf",
          "dateCreated" : "0001-01-01T00:00:00"
        }
      ],
      "feedbacks" : [{
          "email" : "someuser@gmail.com",
          "score" : -1,
          "comment" : "Some text"
        } ]
    }
  },
  

это мой код на c #

 var xxx = client.Search<ElasticApplicant>(q => q.Index("hrm_applicants").Size(100)
          .Query(x=>x.MultiMatch(p=>p.Fields(n=>n.Field(f=>f.Skills).Field(f=>f.ResumeContent))
          .Query("համակարգիչ"))));
  

как включить поля вложенного массива в запрос?

Ответ №1:

Я решил эту проблему с помощью этого кода. Elasticsearch [7.9]

 string keyword="keyword";
var searchResponse = client.Search<ElasticApplicant>(s => s
        .Query(q => q
            .Match(m => m
                .Field(f => f.Skills)
                .Query(keyword)
            ) || q
            .Match(m => m
                .Field(f => f.ResumeContent)
                .Query(keyword)
            ) || q
            .Nested(n => n
        .Path(p => p.Feedbacks)
        .Query(qq => qq.Match(m => m.Field(f => f.Feedbacks.First().Comment).Query(keyword))))

        )
       );