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

本文关键字:搜索 返回 结果 何使用 Elasticsearch NEST | 更新日期: 2023-09-27 17:55:29

我正在尝试使用 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 中的查询很好。

我创建了一个控制台应用程序,该应用程序首先删除索引,重新创建索引,插入公司,然后搜索它。
服务器没有跟上我的控制台应用程序,只有当我停止删除/重新创建索引时,我才能让搜索正常工作。 (脸掌)
如果有人觉得我应该简单地删除这个线程,请在下面的评论中告诉我,我会删除它,但有人可能会发现它有帮助。

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

调试过程的第一步应该是查看向 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;
    }