我知道CouchDB可用于本地开发应用程序并在暂存/生产中切换到Cloudant。这也包含在this question中。
但是,您如何开发需要对Cloudant进行lucene搜索的应用程序功能?有没有办法在本地模仿它?
答案 0 :(得分:1)
已经有一个库将Apache Lucene带到CouchDB上,CouchDB Lucene。但说实话,我不会指责并希望它能与Cloudant合作,因为他们很可能在CloudantDB和Apache Lucene之间建立了自己的桥梁。
答案 1 :(得分:1)
请按照以下步骤操作:
1)按照此处的官方安装说明进行操作:https://github.com/rnewson/couchdb-lucene#build-and-run-couchdb-lucene
2)完成后,您必须编辑CouchDB配置文件(/etc/couchdb/local.ini),添加以下选项:
timeout = 60000
[httpd_global_handlers]
_fti = {couch_httpd_proxy, handle_proxy_req, <<"http://localhost:5985">>}
[couchdb]
timeout = 60000
此处,localhost:5985是您的CouchDB-Lucene服务的URL。当然,您可以在couchdb-lucene.ini配置文件中修改lucene正在侦听的端口。
3)在CouchDB中创建一个新的设计文档,我们称之为_design / lucene。这是它的样子(在创建设计文档时,一定要小心逃避你的javascript函数):
{
"_id": "_design/lucene",
"_rev": "23-b7e715e927d362bc2de8d7716a29947f",
"fulltext": {
"people": {
"index": "function(doc) {\n\tvar ret = new Document();
\n\tret.add(doc.gender,{'field':'gender', 'store':'yes'});
\n\tret.add(doc.age,{'field':'age', 'store':'yes'});
\n\tret.add(doc.name,{'field':'name', 'store':'yes'});
\n\tret.add(doc.city,{'field':'city', 'store':'yes'});
\n\tret.add(doc.lastEmployer,{'field':'lastEmployer', 'store':'yes'});
\n\treturn ret;\n}"
}
}
}
4)现在的问题是,如何将请求发送到新创建的Lucene索引:
尝试这样:
http://127.0.0.1:5984/_fti/local/dbname/_design/lucene/people?q=gender:F
AND age:[20 TO 40] AND city:s*&force_json=true&include_docs=true&sort=age
此处,“people”是索引的名称,如设计文档中所定义。
有关完整的语法参考,您可以阅读官方文档(http://lucene.apache.org/core/2_9_4/queryparsersyntax.html)。
我没有想到任何更改是他们为Lucene查询运行Cloudant,请参阅我发布的上述链接。
答案 2 :(得分:1)
CouchDB Lucene确实有助于为Lucene编制索引,但它并不像cloudant那样工作。例如,cloudant有一个内置索引函数,但Couchdb Lucene没有这样的函数。