如何通过HTTP从C#查询Elasticsearch?

时间:2015-10-28 20:02:48

标签: c# http elasticsearch

我正在尝试用C#编写代码,用于PUT和GET到我的弹性搜索数据。 我像这样输入PUT的代码,似乎它有效:

string url = "http://localhost:9200/my_index/my_type/";

JsonDocFormat json = new JsonDocFormat()
{
   name = "John"
};

string s = JsonConvert.SerializeObject(json);

using (var client = new WebClient())
{
   client.UploadString(url, "POST", s);
}

但我无法为此GET编写代码:

GET my_index/my_type/_search
{
   "query" : {
       "match" : {
            "name" : "john"
        }
    }
}

我试过这样的事情:

string url_req = "http://localhost:9200/my_index/my_type/_search?pretty";

string s1 = "{\"query\": {\"match\": { \"name\" : \"john\" }}}";

string s_req = url_req + s1;

using (var client = new WebClient())
{
    Console.Write(client.DownloadString(s_req));
}

但是这段代码返回了与此GET相同的输出:

GET /my_index/my_type/_search

它没有抛出任何错误,但它绝对忽略了URL末尾的json body。我想在没有任何外部包(如NEST或Elasticsearch.NET)的情况下编写它,只需使用HTTP。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我的问题的最终解决方案在此代码中

string url_req = "http://localhost:9200/my_index/my_type/_search?pretty";

string s = "{\"query\": {\"match\": { \"name\" : \"john\" }}}";

using (var client = new WebClient())
{
    Console.Write(client.UploadString(url_req, "POST", s));
}