簡體   English   中英

如何在CouchDB中創建索引搜索?

[英]How to create index search in CouchDB?

假設在本地配置ouchDB,如何和在何處創建類似於Bluemix上的Cloudant的搜索索引?

在此處輸入圖片說明

我要尋找的解決方案基於此庫

  1. 我必須安裝CouchDB 1.6.1才能在http:// localhost:5984上具有可用數據庫,
  2. 下一步是安裝“ couchdb-lucene”,它在http:// localhost:5985上運行且響應成功。 這是基於Maven的應用程序。

{ “CouchDB的 - lucene” 的: “歡迎光臨”, “版本”: “1.1.0-快照”}

要使其運行,我必須使用mvn在根目錄中構建它,然后導航至目標並在解壓縮的ouchdb -lucene中運行命令./bin/run

root@mario-VirtualBox:/home/mario/CouchDB_mario/couchdb-lucene/target/couchdb-lucene-1.1.0-SNAPSHOT# ./bin/run
  1. 下一個約束是將這兩個服務器連接在一起。 我要做的就是通過/etc/couchdb/local.ini中的代理映射它們

您需要的全部都是以下代碼:

[httpd_global_handlers]
_fti = {couch_httpd_proxy, handle_proxy_req, <<"http://localhost:5985">>}

多虧了這一點,我終於能夠使用Apache Lucene索引查詢CouchDB。

  1. 在查詢之前,我必須插入自定義JSON設計文檔, 而不是通過UI插入新設計 ,也不要插入新視圖 ,而是插入新JSON文檔。 從本質上講,使用偽造的設計對CouchDB進行了一些黑客攻擊,從而可以支持Lucene搜索。 我已使用以下格式的CURL請求

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 }"
       }
   }
}
  1. 舉個例子。 定義了此搜索索引,並在JSON文檔中說這種類型的數據:
  { "_id": "63e5c848fa2211c3b063d6feccd3d942", "_rev": "1-899a6924ed08097b1a37e497d91726fd", "DATAWORKS_DOCUMENT_TYPE": "user14169_slovnik_medical", "vyznam": "End to side", "zkratka": "ets" } 

然后,您可以輕松實現以下查詢:

http://localhost:5984/_fti/local/user14169_slovnik_medical/_design/medical/by_meaning?q=lob~

返回期望的數據: 在此處輸入圖片說明

本地前綴是因為我正在1個節點上的localhost上運行數據庫,並且默認情況下,couchdb-lucene正在連接到localhost。

最酷的事情是,您可以使用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());

要創建搜索索引,您需要創建一個“視圖”。 對此進行了很好的解釋: http : //guide.couchdb.org/editions/1/en/views.html

您可以直接從Futon進行操作,但首先應該使用一個小的數據集進行練習。

你不能 搜索是Cloudant功能,並且在任何當前版本的CouchDB中都沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM