使用动态字段名称搜索 ElasticSearch

Searching ElasticSearch with dynamic field names

我有一个在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;
        }

此returned 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;

        }

以上代码 return 没有任何错误,但是 return 0 个文档。

这里我将 ProductName 传递给 fieldName 参数。我知道这行不通。我只想在这里说出我的意图。

Field 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)
                                                      )
                                         )
                      );