Elasticsearch索引/缓存未清除/卡住

时间:2014-08-28 21:20:42

标签: node.js caching indexing elasticsearch firebase

我正在使用https://github.com/firebase/flashlight索引搜索数据

然而,今天早上我删除了整个firebase索引,所以它应该是空的(这在以前有效,但似乎在某些情况下nodejs app.js崩溃,导致缓存“卡住”),但我仍然以某种方式看到来自我的nodejs app的旧搜索结果...

我试过了:

http://localhost:9200/_cache/clear

http://localhost:9200/_flush
http://localhost:9200/firebase/_flush

他们都说成功,但我仍然得到old results,似乎无处可去。

我还可以在控制台中看到它每60秒刷新一次,删除整个firebase之前没有问题......

我甚至在控制台中看到了一条消息housekeeping: found 60 orphans (removing them now),所以现在应该刷新它...

我尝试重新启动elasticsearch以及整个Linux / Debian服务器......

在config.js中我有两个索引:

exports.paths = [
   {
      path:  "tags",
      index: "firebase",
      type:  "tag",
      filter: function(data) { return data.name !== 'system'; }
   },
   {
      path:  "tracks",
      index: "firebase",
      type:  "track",
      filter: function(data) { return data.name !== 'system'; }
   }
];

奇怪的是,使用'track'商店时没有任何问题,而不是使用'tag'商店...

我在这里缺少什么?

//更新!

所以,我刚刚删除了firebase tracks索引,而nodejs脚本正在运行而脚本crashed ...同样的问题,不同的索引。那么crashing script must cause it ......那么,我该如何clear this stuck cache

3 个答案:

答案 0 :(得分:1)

所以我通过简单地解决了这个问题:

curl -XDELETE localhost:9200/Firebase

感谢:https://github.com/elasticsearch/elasticsearch/issues/7541#issuecomment-54724302

我猜测弹性搜索不知道(并且没有被告知)其当前索引的相关性,也许我使用的Flashlight脚本没有通知它索引应该是什么?但是,因为只有在突然删除整个firebase索引时节点脚本崩溃时才需要这个,所以它应该以某种方式捕获,但我很高兴我至少可以像这样修复它。重建索引现在不是一个大问题/任务,但将来它可能是。

答案 1 :(得分:0)

一个疯狂的猜测,也许你没有正确发布查询。你说你试过以下链接:

http://localhost:9200/_cache/clear
http://localhost:9200/_flush
http://localhost:9200/firebase/_flush

如果您从浏览器访问网址,则无法清除它们。你必须发布它们。如果你这样做,你的问题很模糊,GET和POST都返回相同的结果(显示总数,成功和失败)。使用curl从命令行尝试这个:

curl -XPOST 'http://localhost:9200/_cache/clear'
curl -XPOST 'http://localhost:9200/_flush'

或者使用JQuery创建AJAX请求或使用fiddler。

答案 2 :(得分:0)

尝试通过向弹性搜索服务器发送以下POST请求来优化索引:

curl -XPOST 'http://localhost:9200/_optimize?max_num_segments=1&wait_for_merge=true'

它使lucene真正从磁盘中删除已删除的文档并合并索引。