在Elastic Search上索引Couchbase数据的最佳方法是什么?

时间:2014-03-17 21:52:18

标签: elasticsearch couchbase

我使用Couchbase DB,我想在Elastic Search(ES)上索引部分数据。 来自Couchbase的数据应该同步,即如果CB上的文档发生变化,它应该更改ES上的文档。 关于什么是最好的方法,我有几个问题:

  • 同步数据的最佳方法是什么?我看到ES有一个CB插件(http://www.couchbase.com/couchbase-server/connectors/elasticsearch),但它是推荐的方式吗?
  • 我不想将所有CB文档存储在ES上,但只是部分存储在ES上,例如我想要存储的一些字段而不是一些 - 我怎么能这样做?
  • 我的文档可能有不同的属性,差异可能很大(例如50个不同的属性/字段)。假设我想将所有这些属性索引到ES,它是否会影响性能,因为我有很多字段被索引?

10倍,

3 个答案:

答案 0 :(得分:4)

鉴于doc链接,我假设您使用的是Couchbase而不是CouchDB。

  1. 您正在关注使用Couchbase进行弹性搜索的正确链接。根据文档,配置Couchbase的跨数据中心复制(XDCR)功能,以便在发生突变时自动将数据推送到ES。

  2. 如果没有定义的映射文件,ES将创建默认映射。您可以提供自己的映射文件(或更改它生成的映射文件)以控制索引哪些字段。请参阅http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-object-type.html上的ES文档中的enabled属性。

  3. 是的,索引所有字段都会影响性能。您可以在http://docs.couchbase.com/couchbase-elastic-search/#managing-performance找到有关Couchbase集成的一些性能管理技巧。集成的首选方法是在ES中执行搜索,只获取匹配文档的密钥。然后,您可以对Couchbase群集进行多重调用,以自行检索文档详细信息。因此,虽然ES将索引许多字段,但您不存储所有字段,也不从ES检索它们的值。针对Couchbase的内存中多项目是使用ES中的ID检索匹配文档的最快方法。

答案 1 :(得分:1)

很多问题..!

让我逐一回答:

1)使用河流插件动态同步数据的最佳方式和已有的解决方案。此外,它还将单独索引已更改的文档。这将有助于提高性能。

2)是的,你可以限制在河流插件中索引的字段。参考

插件文档可在couchbase网站上找到。 请参阅: http://docs.couchbase.com/couchbase-elastic-search/

Github River仍在开发中。,但您可以根据需要使用代码并进行修改。

<强> https://github.com/mschoch/elasticsearch-river-couchbase

3)如果你索引所有字段,是的,性能会有一些滞后。所以最好单独索引所需的字段。如果你需要存储一些字段只是为了存储,那么在映射中提到没有分析到具体的。它将减少索引时间和搜索时间。

它有帮助......!

答案 2 :(得分:1)

您可能会发现有关Don Stacy对问题2的回答有用的其他解释:

从Couchbase复制时,有3种方法可以干扰Elasticsearch的默认映射(在开始XDCR之前),因此,根据需要,不会通过设置&#34; store&#34来存储某些字段; = false:

  1. 在索引上创建手动映射
  2. 创建动态模板
  3. 编辑couchbase_template.json
  4. 提示:

    1. 请注意,当我们从Couchbase到Elasticsearch执行XDCR时,Couchbase将原始文档包装在&#34; doc&#34;领域。这意味着在创建映射时必须考虑此修改后的结构。它看起来像这样:

      curl -XPUT 'http://localhost:9200/test/couchbaseDocument/_mapping' -d '
      {
        "couchbaseDocument": {
          "_source": {
            "enabled": false
          },
          "properties": {
            "doc": {
              "properties": {
                "your_field_name": {
                  "store": true,
                  ...
                },
                ...
              }
            }
          }
        }
      }'
      

      文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

      包括/排除_source中的字段:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html

    2. 文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.0/dynamic-templates.html

    3. https://forums.couchbase.com/t/about-elasticsearch-plugin/2433 https://forums.couchbase.com/t/custom-maps-for-jsontypes-with-elasticsearch-plugin/395