2011-05-19 62 views
1

到查詢中數組我的CouchDB數據庫的結構是這樣的:採用彈性搜索CouchDB中

"custom_details": { 
    "user_education": [ 
    { 
     "device_id": "358328030246627", 
     "college_name": "College", 
     "college_year": "2014" 
    }, 
    ] 
} 

"custom_details_1": { 
    "user_education": [ 
    { 
     "device_id": "358328030246627", 
     "college_name": "College", 
     "college_year": "2014" 
    }, 
    ] 
} 

我有陣列內的大量陣列。我正在嘗試使用Elasticsearch來搜索和查找條件,而不管它坐在數組中的哪個位置。那可能嗎?

我一直在通過here的例子,並沒有完全找到我在找什麼。我試過使用Elastica,PHP包裝,但沒有完全理解如何用REST做到這一點,我迷路了。甚至有可能在不知道該字段的情況下搜索數據?

回答

0

在Lucene的,你可以爲每一個設備ID創建一個文檔實例:

public void indexRecord(CouchDBRecord rec) { 
    Document doc = new Document(); 
    doc.add(new Field("device_id", rec.device_id, Store.YES, Index.NOT_ANALYZED)); 
    doc.add(new Field("college_name", rec.college_name, Store.YES, Index.ANALYZED)); 
    doc.add(new Field("college_year", rec.college_year.toString(), Store.YES, Index.NOT_ANALYZED)); 
    this.writer.addDocument(doc); 
} 

這將允許您通過關鍵字在高校名稱進行搜索,或通過精確的設備ID或一年,或它們的某種組合。

0

如果您使用的是Elastica,那麼整個REST的事情已經爲您完成了。如果你想搜索所有領域,你可以定義搜索詞,它會搜索所有領域。

如果您在使用Elastica時遇到麻煩,或者某些功能缺失,請告訴我,因爲我是Elastica的開發人員。

+0

您好Nicolas Ruflin我正在使用couchdb進行彈性搜索。我有一點點困惑,我怎麼能一次管理多個用戶的索引。 – 2014-08-25 05:17:14

+0

爲一個用戶在其工作完美,但當我在同一時間嘗試它爲多個用戶它有警告(org.apache.commons.httpclient.SimpleHttpConnectionManager getConnectionWithTimeout警告:SimpleHttpConnectionManager正在使用不正確。確保HttpMethod.releaseConnection( )總是被調用,並且一次只有一個線程和/或方法正在使用此連接管理器。) – 2014-08-25 05:18:35