2013-05-15 42 views
0

我有它分佈在幾個碎片和副本文檔的索引。大小是ca. 40密耳,我期望它增長揮發性數據Solr中

問題:用戶將信息添加到這些文件,他們經常更改。他們需要將其整合到搜索語法中,例如funny and cool and cat:interesting。當貓是一種揮發性的數據集

據我既不知道Solr的Lucene的也不支持「真正的升級」,這意味着我不得不再次重新索引整套改變文檔。因此我需要將它連接到關係數據庫等外部數據源。

我做到了在Lucene的與擴展搜索(http://lucene.apache.org/core/4_3_0/queryparser/index.html)。該算法是很容易:

  1. Preprosess查詢加入「_」所有的外場
  2. 這些字段映射到類
  3. 每一類擴展org.apache.lucene.search.Filter類和轉換IDS到一個bitset通過覆蓋公共public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException:通過延長org.apache.lucene.queryparser.ext.ParserExtension

    ResultSet set = state.executeQuery();   
        OpenBitSet bitset = new OpenBitSet(); 
        while (set.next()) { 
         bitset.set(set.getInt("ID")); 
        } 
    
  4. 然後,我重寫分析是這樣的:

    public Query parse(ExtensionQuery eq) throws ParseException{ String cat= eq.getRawQueryString(); Filter filter = _cache.getFilter(cat); return new ConstantScoreQuery(filter); }

  5. 使用add方法和完成擴展org.apache.lucene.queryparser.ext.Extensions。

但是如何在Solr中做到這一點?

我發現了一些建議:

  1. 利用外場(http://lucene.apache.org/solr/4_3_0/solr-core/org/apache/solr/schema/ExternalFileField.html
  2. NRS(http://wiki.apache.org/solr/NearRealtimeSearch)看起來正在建造一點點給我。

任何想法如何做到這一點在Solr的?也許有一些代碼示例?

請,也可以考慮,即時通訊還挺新到Solr。

謝謝

回答

1

Solr的4.x發行版都支持Atomic Update我相信可滿足您的需求。

+0

謝謝你,但性能如何呢?再次刪除和添加文檔好得多嗎?我是否需要將所有字段傳遞給請求? Sry如果問題沒有意義 – Windys

+0

您只會傳遞需要更新的字段和更新修改器(添加,設置,刪除)以應用。請參閱文檔以及此功能的限制和注意事項。就性能而言,您需要針對您的具體情況對其進行測試,因爲每個人Solr實現都有太多變量可以製作任何廣泛的性能聲明。 –

+0

還有一個問題,如果我沒有存儲所有的字段呢?例如,由於性能問題,我將文檔的文本單獨存儲在數據庫中。 – Windys