【问题标题】:How to pass build Query string to the Nest Client如何将构建查询字符串传递给 Nest 客户端
【发布时间】:2021-08-03 13:18:13
【问题描述】:

我正在向 JSON 对象添加 ElasticSearch 查询语法并传递参数并构建实际的查询字符串。 我正在使用GetElasticSearchQuery 方法来构建所需的查询并且它工作正常。

我的问题是如何将这个查询字符串直接更新到 ElasticSearch 客户端。我尝试了几个选项来传递构建查询。但它不起作用。有没有办法在 Nest 客户端中使用 buildquery 作为参数。 如何更新 ElasticSearch 客户端以使用该构建查询?

提前致谢

我已经尝试了如下代码:

public static void Main(string[] args)
{
    Program P = new Program();


    string elasticSearchJson = P.GetElasticSearchQuery("Sales.State: CA");
    Console.WriteLine(elasticSearchJson);

    string jobcount = P.JobCount(elasticSearchJson);
}

public string GetElasticSearchQuery(string filter)
{
    string elasticSearchQuery = File.ReadAllText("ESCountQuery.json");
    dynamic workableElasticSearchQuery = JsonConvert.DeserializeObject(elasticSearchQuery);

    workableElasticSearchQuery.query.query_string.query = filter;

    return workableElasticSearchQuery.ToString();
}

public string JobCount(string elasticSearchJson)
{
    var settings = new ConnectionSettings(new Uri("xxx")).DefaultIndex("xxx");

    var client = new ElasticClient(settings);

    var searchRequest = new SearchRequest<string>
    {
        Query = elasticSearchJson
    };

}

【问题讨论】:

    标签: c# nest


    【解决方案1】:

    我写了一篇关于搜索模板的博文。请通过my article here 解决您的问题。

    我还有一个使用 NEST 框架的示例查询,它将解决您的问题。

    var client = new ElasticClient();
        
        var query = new SearchDescriptor<string>()
            .Query(q => q
                .QueryString(m => m
                    .Fields(f => f
                        .Field(ff => ff.Sales.State)
                    )
                    .Query("{{query_string}}")
                )
            ));
            
        var template = client.Serializer.SerializeToString(query);
        
        client.PutSearchTemplate("template-name", ps => ps
            .Template(template)
        );
        
        var searchResponse = client.SearchTemplate<Question>(st => st
            .Index("posts")
            .Id("template-name")
            .Params(p => p
                .Add("query_string", "\"CA\"")  
            )
        );
    

    【讨论】:

    • 您好 Kartheek,感谢您的回复。就我而言,索引名称保持不变,我只需要单独更新查询字符串。我使用了 elasticsearch rawquery 选项,它对我有用。
    • 确切的工作:----------------------------> var result = client.Count( s => s.Query(q => q.Raw(elasticSearchJson)));
    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多