如何使用 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 中的查询很好。
我创建了一个控制台应用程序,该应用程序首先删除索引,重新创建索引,插入公司,然后搜索它。
服务器没有跟上我的控制台应用程序,只有当我停止删除/重新创建索引时,我才能让搜索正常工作。 (脸掌)
如果有人觉得我应该简单地删除这个线程,请在下面的评论中告诉我,我会删除它,但有人可能会发现它有帮助。
调试过程的第一步应该是查看向 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;
}