如何使用Elasticsearch NEST使用匹配搜索返回结果?

时间:2016-07-06 12:57:07

标签: c# elasticsearch nest elasticsearch-net

我正在尝试使用C#和NEST编写一个简单的控制台应用程序来了解有关Elasticsearch的更多信息。

我可以在Sense(Kibana)中运行以下查询

GET /companies/company/_search
{
    "query": {
          "match": {
              "dbaName": "STEAK"
         }
     }
}

我会得到以下结果:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.15342641,
    "hits": [
      {
        "_index": "companies",
        "_type": "company",
        "_id": "1",
        "_score": 0.15342641,
        "_source": {
          "dbaName": "We do steak",
          "primaryLicenseStatus": "T",
          "primaryLicenseDescription": "Restuarant",
          "lastActivityDate": "2016-06-06T08:25:23.4136549-04:00"
        }
      }
    ]
  }
}

但是,当我尝试使用NEST进行此查询时,我没有得到任何结果:

var response = client.Search<Company>(s => s
    .Index(theIndex)
    .Query(q =>
        q.Match(m => m.Field(f => f.DbaName).Query("steak"))
    )
);

更新 - 我明白了!
所以我觉得我应该把这篇文章记下来,因为问题与解决方案无关。

剧透:我在NEST的查询很好。

我创建了一个控制台应用程序,首先删除索引,重新创建索引,插入公司然后搜索它。
服务器没有跟上我的控制台应用程序,只有当我停止删除/重新创建索引时,才能让搜索工作。 (捂脸)
如果有任何感觉我应该删除这个帖子,请在下面的评论中告诉我,我会将其删除,但有人可能会觉得它有用。

1 个答案:

答案 0 :(得分:0)

调试过程的第一步应该是查看正在向ES发出的请求,并将其与您期望的内容进行比较。

这是一个很好的扩展方法,用于获取发送给ES的原始json:

    /// <summary>
    /// Debugging method to get the json that was sent to ES
    /// </summary>
    public static string GetRequestString(this IResponse response)
    {
        var request = response.RequestInformation.Request;
        if (request != null)
        {
            return Encoding.Default.GetString(request);
        }
        return response.RequestInformation.RequestUrl;
    }