【发布时间】:2016-11-08 12:58:13
【问题描述】:
我正在尝试使用 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 中的查询很好。
我创建了一个控制台应用程序,它首先删除索引,重新创建它,插入公司,然后搜索它。
服务器没有跟上我的控制台应用程序,只有当我停止删除/重新创建索引时,我才能让搜索工作。 (捂脸)
如果有人觉得我应该直接删除这个帖子,请在下面的 cmets 中告诉我,我会删除它,但有人可能会觉得它有帮助。
【问题讨论】:
-
NEST 查询的序列化形式是什么样的?
dbaName字段上设置了什么分析器(如果有)? -
感谢拉斯的回复。抱歉,我对 Elasticsearch 有点陌生,并且不能 100% 确定如何获得您的问题的答案。我没有指定分析器,所以我假设正在使用默认值。我已经探索了如何找出答案,但没有拿出一篇可靠的文章来解释。
-
不用担心 :) 您可以使用 Fiddler(
targetingipv4.fiddler:9200` 而不是localhost:9200)来记录请求/响应,或者您可以按照 - @ 使用OnRequestCompleted987654321@。被索引的文档不会立即在搜索中可用,您需要等待刷新间隔(默认为 1 秒)才能出现在搜索文档中。您可以手动刷新,这对测试很有用,但应尽量避免在生产中频繁调用它。
标签: c# elasticsearch nest elasticsearch-net