如何解决使用 Nest
我使用 nest 的连接设置如下:
var connectionPool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(connectionPool,new InMemoryConnection());
settings.disableDirectStreaming(true); // needed to see good looking debug log on insert
settings.DefaultIndex(Index);
Client = new Elasticclient(settings);
我希望使用 new InMemoryConnection()
查询 nest - 更改 Azure Cloud 函数内的数据。
奇怪的是,调试日志看起来很有希望索引:
/*
var res = await Client.IndexManyAsync(response.Elements,Index); //
Console.WriteLine(res.Debuginformation);
*/
/*
var res = await Client.IndexAsync(response,i => i.Index(Index)); // Index = "data"
Console.WriteLine(res.Debuginformation); // <--
*/
并在插入后直接记录计数为 0:
// var anyDocs = await Client.CountAsync<OverpassElement>(c => c.Index(Index));
var anyDocs = await Client.CountAsync<OverpassElement>(c => c);
Console.WriteLine("count: " + anyDocs.Count);
..但是整个 json 数据随着插入被记录。
插入后为什么我无法计数(以便我可以在下一步中搜索)?
其实我明白:
从 POST 上成功 (200) 低级别调用构建的无效 nesT 响应:/data/_doc
在 0
插入处有 IndexResponse
项。
数据 属于 Element
,类似于包含 4221 个此类项目的数组的以下部分:
{
"type": "relation","id": 8353694,"timestamp": "2018-06-04T22:54:27Z","version": 1,"changeset": 59551528,"user": "asdf2","uid": 1416503,"members": [
{
"type": "way","ref": 89956942,"role": "from"
},{
"type": "node","ref": 1042756547,"role": "via"
},{
"type": "way","ref": 89956938,"role": "to"
}
],"tags": {
"restriction": "no_left_turn","type": "restriction"
}
},
解决方法
ElasticSearch 与 NoSql 数据存储有很多相似之处。在这种情况下,默认情况下不保证“写后读”。当索引 API 调用返回成功时,并不意味着“此文档现在可供搜索”;这意味着“ElasticSearch 已接受您的文档,它将很快可用于搜索”。 ElasticSearch 默认使用最终一致性。
但是,这在测试过程中会很烦人。所以 ElasticSearch 有一个 Refresh API ,它本质上只是阻塞,直到所有已经索引的文档都可用于搜索。我强烈建议您不要在生产中调用它;仅在测试代码中。
,我不知道 Nest 是什么,但我敢打赌 100 美元,如果它使用事务概念,也许您应该提交它以正确查看计数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。