И запрос не работает должным образом в гнезде C# - PullRequest
0 голосов
/ 04 мая 2020

Отдельные запросы через гнездо извлекают то, что я ожидаю, но когда я пытаюсь использовать оба запроса для создания логического запроса AND, кажется, что он возвращает только значения для MatchPhrase и игнорирует DateRange.

Отдельные запросы are ..

resultsList = Client.SearchAsync<AuditLog>(s => s
   .From(0)
   .Take(10)
   .Query(q => q
      .MatchPhrase(mp => mp
         .Field("audit_Action")
         .Query("Successful logout")
      )
   )
).Result.Documents.ToList();

And ...

resultsList = Client.SearchAsync<AuditLog>(s => s
   .From(0)
   .Take(10)
   .Query(q => q
      .DateRange(r => r
         .Field("audit_TimeStamp")
         .GreaterThanOrEquals("2017-03-07T13:00:00")
         .LessThanOrEquals("2017-03-07T14:00:00")
      )
   )
).Result.Documents.ToList();

Эти два запроса возвращают правильное количество строк, 10 и 5 соответственно, но когда я объединяю два запроса, он все равно возвращает 10 строки, а не 1, как ожидалось. Мой пересмотренный запрос ...

resultsList = Client.SearchAsync<AuditLog>(s => s
   .From(0)
   .Take(10)
   .Query(q => q
      .Bool(b => b
         .Must(m1 => m1
            .DateRange(r => r
               .Field("audit_TimeStamp")
               .GreaterThanOrEquals("2017-03-07T13:00:00")
               .LessThanOrEquals("2017-03-07T14:00:00")
            )
         )
         .Must(m1 => m1
            .MatchPhrase(m => m
               .Field("audit_Action")
               .Query("Successful logout")
            )
         )
      )
   )
).Result.Documents.ToList();

Не уверен, что не так, но думаю, что это, вероятно, потому что я использую для ОБЯЗАТЕЛЬНО, и они OR OR

1 Ответ

1 голос
/ 05 мая 2020

Ваше второе обязательство переписывает первое обязательное предложение. Вам нужно передать все запросы к одному и тому же суфле

Вам необходимо определить запрос, как показано ниже.

Client.Search<AuditLog>(s => s
                                    .From(0)
                                    .Take(10)
                                    .Query(q => q
                                       .Bool(b => b
                                          .Must(m1 => m1
                                             .DateRange(r => r
                                                .Field("audit_TimeStamp")
                                                .GreaterThanOrEquals("2017-03-07T13:00:00")
                                                .LessThanOrEquals("2017-03-07T14:00:00")
                                             ),
                                             m1=>m1.MatchPhrase(m => m
                                                .Field("audit_Action")
                                                .Query("Successful logout")
                                             )
                                          )

                                       )
                                    )
                                );
...