我正在寻找的解决方案是基于这个库的。
{"couchdb-lucene":"欢迎","version":"1.1.0-SNAPSHOT"}
为了使其运行,我必须使用 mvn 在根目录中构建它,然后导航到目标并在解压缩的 couchdb-lucene 中运行命令./bin/run :
root@mario-VirtualBox:/home/mario/CouchDB_mario/couchdb-lucene/target/couchdb-lucene-1.1.0-SNAPSHOT# ./bin/run
Run Code Online (Sandbox Code Playgroud)
您所需要的只是以下代码:
[httpd_global_handlers]
_fti = {couch_httpd_proxy, handle_proxy_req, <<"http://localhost:5985">>}
Run Code Online (Sandbox Code Playgroud)
多亏了它,我终于能够使用 Apache Lucene 索引查询 CouchDB。
curl -X PUT http://localhost:5984/user14169_slovnik_medical/_design/medical -d @user14169_slovnik_medical.json
JSON 设计文档如下所示:
{
"_id": "_design/medical",
"fulltext": {
"by_meaning": {
"index": "function(doc) { var ret=new Document(); ret.add(doc.vyznam); return ret }"
},
"by_shortcut": {
"index": "function(doc) { var ret=new Document(); ret.add(doc.zkratka); return ret }"
}
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud){ "_id": "63e5c848fa2211c3b063d6feccd3d942", "_rev": "1-899a6924ed08097b1a37e497d91726fd", "DATAWORKS_DOCUMENT_TYPE": "user14169_slovnik_medical", "vyznam": "End to side", "zkratka": "e-t-s" }
然后你就可以轻松实现这样的查询:
http://localhost:5984/_fti/local/user14169_slovnik_medical/_design/medical/by_meaning?q=lob~
Run Code Online (Sandbox Code Playgroud)
本地前缀是因为我在 1 个节点上的本地主机上运行数据库,并且默认情况下 couchdb-lucene 连接到本地主机。
最酷的是,您可以在 Java 中使用客户端 API org.lightcouch jar 库并执行一些简单的调用,如下所示:
CouchDbClient dbClient = new CouchDbClient("user14169_slovnik_medical", true, "http", "127.0.0.1", 5984, null, null);
String uriFullText = dbClient.getBaseUri() + "_fti/local/user14169_slovnik_medical/_design/medical/by_shortcut?q=lob*";
JsonObject result = dbClient.findAny(JsonObject.class, uriFullText);
System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)