触发河更新弹性搜索

时间:2012-08-01 16:39:41

标签: rest full-text-search nosql search-engine elasticsearch

我使用jdbc河流插件进行弹性搜索河流设置,只需执行简单的select * from和索引该表。

但我希望能够通过API以及标准时间间隔按需触发河流,这样我就可以在文档插入此表时将其编入索引。

目前有人知道无论如何都要这么做吗?

即。 /_river/my_river/_refresh

感谢。

4 个答案:

答案 0 :(得分:1)

我没有看到一个很好的方法让您触发JDBC River实时索引您的特定更新文档,而且我不确定它是否适合用于此目的。

为什么不直接从更新代码索引文档,而不是触发JDBC河来索引文档?

JDBC河是提供大量数据流的好方法,而且documentation for maintaining coherency with the polling。但我不认为有一个容易满足你的实时要求。

答案 1 :(得分:0)

感谢您的建议。非常欢迎您提供反馈,请加入elasticsearch社区。我将打开一个触发https://github.com/jprante/elasticsearch-river-jdbc/issues

获取的问题

答案 2 :(得分:0)

听起来你正在努力解决经典的“push vs. pull”索引问题。 Rivers旨在以一定间隔从数据库中提取数据。它们很容易设置,但就像计算机科学中的所有东西一样,它们是一种权衡。具体来说,您将失去实时索引。你可以触发的河流可能是两个世界中最好的河流,或者它可能会因为大量不必要的流量而淹没你的服务器(例如,当你确切地知道哪个文件被更新时,为什么要“SELECT * ...”。)。

如果您有实时索引要求(就像我一样),您可以将更新“推送”到Elasticsearch中。您只需要编写一个Elasticsearch客户端,它将在保存时将更新的记录传递给Elasticsearch。 FWIW,我通过在服务总线上触发消息解决了这个问题,另一端等待的服务从SQL中检索实体并将其编入索引。一旦拥有了这个基础架构,编写一个小应用程序来初始导入SQL数据或创建一个预定作业来索引数据并不是什么大问题。

答案 3 :(得分:-1)

alernative将使用带有jdbc插件的logstash

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

  1. 下载logstash
  2. 安装input-jdbc-plugin
  3. 示例配置:

        input {
                jdbc {
                        jdbc_connection_string => "jdbc:oracle:thin:@localhost:1521:XE"
                        jdbc_user => "user"
                        jdbc_driver_library => "/home/logstash/lib/ojdbc6.jar"
                        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
                        statement => "select * from events where update_date > :sql_last_value order by update_date"
                        last_run_metadata_path => "run_metadata_event.log"
                        schedule => "* * * * *"
                        jdbc_password => "password"
                }
        }
        # The filter part of this file is commented out to indicate that it is
        # optional.
        filter {
               mutate {
                       split => { "field_1" => ";"}
    
               }
        }
    
        output {
            elasticsearch {
                #protocol => "http"
                hosts => ["localhost:9200"]
                index => "items"
                document_type => "doc_type"
                document_id => "%{doc_id}"
            }
        }