【问题标题】:ElasticSearch duplicating indexesElasticSearch 重复索引
【发布时间】:2015-02-26 22:05:25
【问题描述】:

(请先阅读本文How to use Elastic Search on top of a pre-existing SQL Database?)我目前正在使用MySql,但我正在尝试更改为使用ElasticSearch 作为我们的搜索引擎。我正在使用以下 curl 请求通过Elastic Search River JDBC 将表迁移到弹性搜索:

curl -XPUT 'localhost:9200/_river/table_river/_meta' -d '{
"type" : "jdbc",
"jdbc" : {
    "url" : 'localhost:9200/blah', "user" : "x", "password" : "x",
    "sql" : "select some_field as _id, * From some_table",
    "index": "some_index",
    "type" : "some_type",
    "schedule" : "0 0-59 0-23 ? * *"
}
}'

为了保持弹性搜索和 mysql 表同步,我使用 schedule 参数每分钟运行一次并将表拉入弹性搜索,但在执行期间弹性搜索创建重复索引,我得到以下信息:

complete: river jdbc/table_river metrics: 21123 rows

一分钟后,河流再次执行我得到以下响应:

complete: river jdbc/table_river metrics: 42246 rows

我的“index_total”从 21125 增加到 42248 到 63371,但文档总数保持不变:21125

我可能没有正确地做事。我会先接受一篇文章的网址,而不是有人告诉我如何去做。我先做了一些公平的研究。

Avoid rebuilding index through jdbc-river on elasticsearch

elasticsearch data increase & duplicate at each restart

【问题讨论】:

  • 重复索引是什么意思?你能试着描述一下你想要做什么吗?并且可能会添加一些日志错误
  • 快速更新了我的描述,希望你能帮助我
  • 您似乎误解了 Elasticsearch JDBC River 插件的实际工作原理。为什么需要保持数据库和 elasticsearch 同步?您多久在数据库中插入/更新元素?
  • 顺便说一句,您发布的链接中的答案不是很准确。你用的是什么版本的elasticsearch?
  • 插入/更新并不经常进行,但我将组成一个大约 100 万行的表的各种表展平,我希望能够通过 ES API 实现非常有效地查询该表Lucene 的全文搜索引擎。但我不希望使用 ElasticSearch 和 MySql 数据库的数据不稳定,所以我不知道如何解决这个问题。

标签: elasticsearch


【解决方案1】:

每分钟将表中的所有数据重新索引到 ES 中,效率会非常低。我建议相反,当您从 mySQL 插入/更新时,将该表的主键放入队列系统(我们使用 rabbitMQ)。然后,您可以让 1、2 或 100 个兔子消费者获取数据,以某种方式对其进行转换,然后插入到 ElasticSearch 中。

此解决方案的美妙之处在于它解决了新数据和现有数据的问题。要回填整个表,只需将所有主键插入您的队列,并让您​​的队列消费者填写 ElaticSearch。

此外,这样您只在需要时才做工作,而不是每分钟都做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多