我使用Couchbase DB,我想在Elastic Search(ES)上索引部分数据。 来自Couchbase的数据应该同步,即如果CB上的文档发生变化,它应该更改ES上的文档。 关于什么是最好的方法,我有几个问题:
10倍,
答案 0 :(得分:4)
鉴于doc链接,我假设您使用的是Couchbase而不是CouchDB。
您正在关注使用Couchbase进行弹性搜索的正确链接。根据文档,配置Couchbase的跨数据中心复制(XDCR)功能,以便在发生突变时自动将数据推送到ES。
如果没有定义的映射文件,ES将创建默认映射。您可以提供自己的映射文件(或更改它生成的映射文件)以控制索引哪些字段。请参阅http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-object-type.html上的ES文档中的enabled属性。
是的,索引所有字段都会影响性能。您可以在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:
提示:
请注意,当我们从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
文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.0/dynamic-templates.html