在进行非常基本的搜索时遇到问题 - 没有结果

时间:2014-04-15 15:03:08

标签: c# json elasticsearch nest

我已启动并运行Elasticsearch。在Marvel中使用Sense,我可以通过此查询获得结果:

GET _search
{
  "query": {
    "query_string": {
      "query": "massa"
    }
  }
}

我的c#代码,尝试重新创建以上内容:

    var node = new Uri("http://localhost:9200");
    var settings = new ConnectionSettings(node).SetDefaultIndex("mediaitems");
    var client = new ElasticClient(settings);

    var results = client.Search<stuff>(s => s
        .Query(qs => qs.QueryString(q => q.Query("massa"))));

    var d = results.Documents;

但不幸的是,我没有得到任何结果,“results.Documents”中没有任何结果。有什么建议?也许有办法看到生成的json?查询索引中的所有内容的最简单方法是什么?谢谢!

3 个答案:

答案 0 :(得分:2)

即使您的搜索结果将使用.Search<stuff>映射到正确的类型,您仍需要将默认类型设置为查询的一部分。

    var node = new Uri("http://localhost:9200");
    var settings = new ConnectionSettings(node).SetDefaultIndex("mediaitems");
    var client = new ElasticClient(settings);

    var results = client.Search<stuff>(s => s
        .Type("stuff") //or .Type(typeof(stuff)) if you have decorated your stuff class correctly.
        .Query(qs => qs.QueryString(q => q.Query("massa"))));

    var d = results.Documents;

此外,您的results响应包含ConnectionStatus属性。您可以查询此属性以查看Elasticsearch的{​​{1}}和Request,以查看您的查询是否按预期执行。

更新:您也可以设置默认类型的索引设置。

Response

答案 1 :(得分:1)

您还可以检查嵌套原始客户端

var results = client.Raw.SearchPost("mediaitems", "stuff", new
      {
          query = new
          {
              query_string = new
              {
                      query = "massa"
              }
          }
      });

答案 2 :(得分:0)

您可以获取搜索请求URL和JSON请求正文的值,如下所示:

var requestURL = response.RequestInformation.RequestUrl;
var jsonBody = Encoding.UTF8.GetString(response.RequestInformation.Request);

您可以在RequestInformation中找到其他有用的属性以进行调试。