2012-08-01 54 views
4

我有一个使用jdbc河插件的弹性搜索河设置,只是做了一个简单的select * from和索引该表。触发河更新elasticsearch

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

有人知道现在做这件事吗?

/_river/my_river/_refresh

感谢。

回答

1

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

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

JDBC河流是喂养大量数据流的好方法,并且有​​。但我认为不容易满足您的实时要求。

0

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

+0

这是非常有用的信息(尤其是问题链接),但它应该是对原始帖子的评论,而不是对问题的实际“答案”,因为没有提供对问题的解决方案。谢谢! – 2014-04-03 14:27:40

+0

(我意识到这是旧的,但仍然)此外,发布评论_after_创建问题会很有帮助,以便链接可能是实际问题,而不是强迫人们搜索它以检查状态。 – 2014-11-16 10:38:40

0

上触发提取问题,这听起来像您正在努力处理经典的“push vs. pull”索引问题。河流被设计为每隔一段时间从数据库中提取数据。它们很容易建立,但像计算机科学中的所有东西一样,它们是一个折衷。具体而言,您会失去实时索引。你可以触发的一条河可能是两全其美的,或者它可能会淹没你的服务器,造成大量不必要的流量(也就是说,当你确切地知道哪个文件被更新时,为什么要“SELECT * ...”)。

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

-1

alernative将使用logstash使用JDBC插件

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

  1. 下载logstash
  2. 安装输入JDBC-插件

例如配置:

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}" 
     } 
    } 
+0

虽然这在理论上可以回答这个问题,但[这将是更可取的](// meta.stackoverflow.com/q/8259)在这里包括答案的基本部分,并提供供参考的链接。 – 2016-11-05 08:48:47