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