【问题标题】:Tire Elasticsearch could not find all Users with IDsTire Elasticsearch 无法找到所有具有 ID 的用户
【发布时间】:2013-09-06 10:10:10
【问题描述】:

我正在使用 Tire 和 ElasticSearch 来检索一组使用 load: true 的用户,并且我看到了奇怪的 ID 参数。我收到的错误是:

Couldn't find all Users with IDs (mhNpuOspSQeUWpHExeVEPA, iSum7MecRw2FKbbFD8NSYg, vl3VMWESQiuECI56fBY-TQ, y0Wy3aOtQR26zQle8_K9Sw, 56625, 479165, 479169, 62911, 479181, 479173) (found 6 results, but was looking for 10)

我确定找到的 6 个结果是整数 ID,但是四个字母数字 ID 是什么,我应该如何最好地处理它们?希望这是显而易见的事情,但我还没有找到任何可以解释这一点的东西。

编辑

to_indexed_json 的示例内容:

{"email"=>"lucy@example.com", "forename"=>"Lucy", "id"=>5070, "surname"=>"Test", "username"=>"", "is_deleted"=>false}

【问题讨论】:

  • 可能重复另一个 SO 问题 stackoverflow.com/questions/15026612/… 无论如何添加了答案。
  • 能否请您发布您的映射和 to_indexed_json 代码(如果可能)以分析字母数字 ID?
  • 你也可以看看这个补丁。这是经过测试并且工作正常(我目前正在使用它)。 github.com/jeyb/tire/commit/…
  • 感谢您查看 Vamsi - 我看到了另一个问题,但它没有解决字母数字 IDS。改用 where 而不是 find 很好,但我更愿意了解这些奇怪 ID 的来源。
  • 索引自​​身时是否可能发生了一些奇怪的事情?是否可以发布 to_indexed_json 和映射?

标签: ruby-on-rails-3.2 elasticsearch tire


【解决方案1】:

发生这种情况是因为,您使用 load => true 选项从数据库加载搜索结果。 DB中似乎缺少activerecord,但elasticsearch索引包含相同的文档。

您可以尝试重新索引数据。恕我直言,重新索引并不总是解决方案。

最好的解决方案是在db中删除文档时将其删除。您可以为此使用 after_destroy 回调。

Tire remove api 用于从索引中删除单个文档。

Tire.index('my-index-name').remove('my-document-type', 'my-document-id')

参考:https://github.com/karmi/tire/issues/43

【讨论】:

  • 是的,我明白了所有这些,回调应该负责删除文档。我的问题是:这些字母数字 ID 是什么?它们来自哪里?
  • 对不起,我忽略了字母数字 ID 的问题。
猜你喜欢
  • 2021-11-22
  • 2021-05-21
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多