Поиск ElasticSearch с динамическими c именами полей - PullRequest
1 голос
/ 23 апреля 2020

У меня есть метод для поиска в C# следующим образом:

public void Search(string data)
        {
            var searchResponse = client.Search<Products>(s => s
                .From(0)
               .Size(100)
               .Query(q => q
                 .Match(m => m
                     .Field( f => f.ProductName)
                      .Query(data))));
             int cnt = searchResponse.Documents.Count;
        }

Это вернуло 5 документов, которые действительны.

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

public void Search(string data,string fieldName)

    {
            var searchResponse = client.Search<Products>(s => s
                .From(0)
               .Size(100)
               .Query(q => q
                 .Match(m => m
                     .Field(fieldName)
                      .Query(data))));

            int cnt = searchResponse.Documents.Count;

        }

Приведенный выше код возвращает любую ошибку, но возвращает 0 документов.

Здесь я передаю ProductName в fieldName параметр. Я знаю, что это не сработает. Я просто хочу сказать свое намерение здесь.

1 Ответ

0 голосов
/ 23 апреля 2020

Поле Infering

Вы можете перейти к вашему запросу ниже

var fieldString = new Field ("fieldName");

var fieldString = new Field("fieldName");
var searchResponse = _elasticClient.Search<AllOpportunitySearchResult>(s => s
                                   .From(0)
                                   .Size(100)
                                   .Query(q => q
                                                .Match(m => m
                                                             .Field(fieldString)
                                                             .Query(data)
                                                      )
                                         )
                      );
...