elasticsearch 在弹性搜索上索引Couchbase数据的最佳方法是什么,elasticsearch,couchbase,elasticsearch,Couchbase" /> elasticsearch 在弹性搜索上索引Couchbase数据的最佳方法是什么,elasticsearch,couchbase,elasticsearch,Couchbase" />

elasticsearch 在弹性搜索上索引Couchbase数据的最佳方法是什么

elasticsearch 在弹性搜索上索引Couchbase数据的最佳方法是什么,elasticsearch,couchbase,elasticsearch,Couchbase,我与Couchbase DB合作,我想在弹性搜索(ES)上为其部分数据编制索引。 来自Couchbase的数据应同步,即如果CB上的文档发生更改,则应更改ES上的文档。 我有几个问题,关于做这件事的最佳方式是什么: 同步数据的最佳方式是什么?我看到ES()有一个CB插件,但这是推荐的方法吗 我不想将所有CB文档都存储在ES上,但只存储其中的一部分,例如,我想存储的一些字段和不想存储的一些字段-我该怎么做 我的文档可能有不同的属性,差异可能很大(例如,50个不同的属性/字段)。假设我想将所有这些

我与Couchbase DB合作,我想在弹性搜索(ES)上为其部分数据编制索引。 来自Couchbase的数据应同步,即如果CB上的文档发生更改,则应更改ES上的文档。 我有几个问题,关于做这件事的最佳方式是什么:

  • 同步数据的最佳方式是什么?我看到ES()有一个CB插件,但这是推荐的方法吗
  • 我不想将所有CB文档都存储在ES上,但只存储其中的一部分,例如,我想存储的一些字段和不想存储的一些字段-我该怎么做
  • 我的文档可能有不同的属性,差异可能很大(例如,50个不同的属性/字段)。假设我想将所有这些属性都索引到ES,它会影响性能吗,因为我有很多字段被索引了
10倍,

很多问题

让我逐一回答:

1) 使用river插件动态同步数据是最好的方法,也是已经可用的解决方案。此外,它还可以单独索引已更改的文档。这将对性能有很大帮助

2) 是的,您可以在river插件中限制要索引的字段。提及

插件的文档可以在couchbase网站上找到。 请参阅:

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

3) 如果对所有字段进行索引,是的,性能会有一些滞后。因此最好单独对所需字段进行索引。若你们需要存储一些字段只是为了存储,那个么在映射中提到并没有分析到特定的字段。这将减少索引时间和搜索时间


希望对你有帮助

给定doc链接,我假设您使用的是Couchbase而不是CouchDB

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

  • 如果没有定义的映射文件,ES将创建默认映射。您可以提供自己的映射文件(或更改它生成的映射文件),以控制哪些字段被索引。请参阅位于的ES文档中的enabled属性

  • 是的,索引所有字段将影响性能。您可以在上找到Couchbase集成的一些性能管理技巧。集成的首选方法是在ES中执行搜索,并仅获取匹配文档的密钥。然后对Couchbase集群进行multiget调用,以检索文档细节。因此,虽然ES将索引许多字段,但您不会将所有字段都存储在那里,也不会从ES检索它们的值。内存中针对Couchbase的multiget是使用ES中的ID检索匹配文档的最快方法


  • 你可能会发现关于Don Stacy对问题2的回答的额外解释很有用:

    当从Couchbase复制时,有3种方法可以干扰Elasticsearch的默认映射(在启动XDCR之前),因此,根据需要,通过设置“store”=false不存储某些字段:

  • 在索引上创建手动映射
  • 创建一个动态模板
  • 编辑couchbase_template.json
  • 提示:

  • 注意,当我们从Couchbase到Elasticsearch执行XDCR时,Couchbase将原始文档包装在“doc”字段中。这意味着您在创建映射时必须考虑此修改的结构。它看起来像这样:

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

    包括/排除来自_源的字段:

  • 文件:


  • 是的,我使用的是Couchbase,而不是CouchDB:)我计划像你说的那样工作,只存储ID和需要在ES上索引的字段,然后使用multi-get。但是,我不明白的是如何使用XDCR并同时对文档进行操作。我的意思是,我想在将文档存储到ES之前对其进行一些更改(例如,删除一些不必要的字段)。设置XDCR配置后,源集群(Couchbase)中的所有文档变化将流向目标集群。整个文档流到ES,并在那里编制索引。索引利用您定义的映射来指定应索引哪些字段、字段类型等。您的模板可以选择忽略文档中不必要的字段。所有索引都是ES的功能。Couchbase只是将文档发送到ES集群。Couchbase有一个river插件。它仍处于开发阶段。但是您可以下载代码并根据需要进行更改。对不起,误解了。我已经更新了我的答案。请检查一下。。!