在本地开发基于Cloudant的应用程序

时间:2014-11-10 14:03:19

标签: lucene couchdb cloudant

我知道CouchDB可用于本地开发应用程序并在暂存/生产中切换到Cloudant。这也包含在this question中。

但是,您如何开发需要对Cloudant进行lucene搜索的应用程序功能?有没有办法在本地模仿它?

3 个答案:

答案 0 :(得分:1)

已经有一个库将Apache Lucene带到CouchDB上,CouchDB Lucene。但说实话,我不会指责并希望它能与Cloudant合作,因为他们很可能在CloudantDB和Apache Lucene之间建立了自己的桥梁。

答案 1 :(得分:1)

Dmi,我对Cloudant没有多少经验。但是,根据CouchDB Lucene,我们可以在本地模拟它,并根据此链接,https://docs.cloudant.com/api/search.html我认为CouchDB Lucene在Cloudant上运行良好(我们在本地模拟)。

请按照以下步骤操作:

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没有这样的函数。