【问题标题】:Searching ElasticSearch with dynamic field names使用动态字段名称搜索 ElasticSearch
【发布时间】:2020-04-23 09:50:28
【问题描述】:

我有一个在 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 参数。我知道这行不通。我只想在这里说出我的意图。

【问题讨论】:

    标签: elasticsearch search dynamic field


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2018-08-08
      • 1970-01-01
      相关资源
      最近更新 更多