【问题标题】:ElasticSearch - add\update SearchTemplate using NEST (.net)ElasticSearch - 使用 NEST (.net) 添加\更新 SearchTemplate
【发布时间】:2017-03-30 14:20:03
【问题描述】:

我得到了这个 elasticsearch 实例,并试图实现类似“动态”搜索模板的东西。

案例: 我有一个用户界面,我们可以在其中调整某些类型的提升。 前任。 “文章点击率提高 10”、“产品页面点击率提高 20”

今天: 我可以使用流利的 DSL 编写查询本身,每次有人搜索时都会生成该查询。

未来: 我希望在每次更改时都会更新的搜索模板中使用它,从而只需传入模板名称和查询字符串 - 而不必在每个请求上查找当前的提升值。

我的研究: 所以嵌套客户端支持将搜索模板添加到 ES 实例,但它似乎只支持“内联”脚本,我似乎无法找到一种方法将我用“Fluent DSL”编写的现有查询解析为 JSON 等价物。

后备思路: 使用 json\query DSL 手动编写脚本。

有什么想法\解决方案吗? :)

【问题讨论】:

  • 你有没有尝试过?
  • 现在我只是想知道要尝试什么,但我做不到。所以不行。无非就是尝试探索哪些属性可用于 NEST 中的 SearchTemplate 类型。
  • 你可以serialize the search requests转成JSON。
  • 您使用的是什么版本的 NEST?您的目标是哪个版本的 Elasticsearch?
  • 抱歉,大家回复晚了——我用的是最新版本(5.2),altought 5.3 几天前就出来了,所以我会在投入生产之前升级。 Romoku,让我走上了正确的道路,所以我将添加一个使用更新方法的答案,而不是使用流利的 dsl。

标签: c# elasticsearch nest elasticsearch-net


【解决方案1】:

版本:ElasticSearch\ElasticSearch.NET\NEST v5.2

正如 cmets 中所指出的,NEST 客户端上有一个序列化程序,您也可以使用 NewtonSoft JSON 库作为this answer 中的指针 - 但也如前所述,要获得确切的 JSON,请使用 Nest 客户端序列化程序,它使用正确的配置包装 NewtonSoft JSON。

这是我使用对象初始化器语法执行的一个示例,因为上面提到的答案中所述的那个使用了一个旧库。

var searchRequest = new SearchRequest()
        {
            Query = query
        };
        var myBytes = _client.Serializer.SerializeToBytes(searchRequest);
        var jsonSearchTemplate = Encoding.UTF8.GetString(myBytes);

作为额外信息,这是您将其添加到集群的方式:

//Define your template ID, this is later used when doing the search.
var templateRequest = new PutSearchTemplateDescriptor("my_template");

//Add your parsed json as the inline script
templateRequest.Template(jsonSearchTemplate);

var response = _client.PutSearchTemplate(templateRequest);

如何使用模板查询:(我也有多个参数需要传入)

var response =
            _client.SearchTemplate<MyIndexObject>(
                e =>
                    e.Index($"myIndex")
                        .Id("my_template")
                        .Params(new Dictionary<string, object>()
                        {
                            {"query_string", "Obamacare"},
                            {"min_should_match", "70%"}
                        }));

希望这可以帮助其他在同一件事上苦苦挣扎的人。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多