我有它分佈在幾個碎片和副本文檔的索引。大小是ca. 40密耳,我期望它增長揮發性數據Solr中
問題:用戶將信息添加到這些文件,他們經常更改。他們需要將其整合到搜索語法中,例如funny and cool and cat:interesting
。當貓是一種揮發性的數據集
據我既不知道Solr的Lucene的也不支持「真正的升級」,這意味着我不得不再次重新索引整套改變文檔。因此我需要將它連接到關係數據庫等外部數據源。
我做到了在Lucene的與擴展搜索(http://lucene.apache.org/core/4_3_0/queryparser/index.html)。該算法是很容易:
- Preprosess查詢加入「_」所有的外場
- 這些字段映射到類
每一類擴展org.apache.lucene.search.Filter類和轉換IDS到一個bitset通過覆蓋公共
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException
:通過延長org.apache.lucene.queryparser.ext.ParserExtensionResultSet set = state.executeQuery(); OpenBitSet bitset = new OpenBitSet(); while (set.next()) { bitset.set(set.getInt("ID")); }
然後,我重寫分析是這樣的:
public Query parse(ExtensionQuery eq) throws ParseException{ String cat= eq.getRawQueryString(); Filter filter = _cache.getFilter(cat); return new ConstantScoreQuery(filter); }
- 使用add方法和完成擴展org.apache.lucene.queryparser.ext.Extensions。
但是如何在Solr中做到這一點?
我發現了一些建議:
- 利用外場(http://lucene.apache.org/solr/4_3_0/solr-core/org/apache/solr/schema/ExternalFileField.html)
- NRS(http://wiki.apache.org/solr/NearRealtimeSearch)看起來正在建造一點點給我。
任何想法如何做到這一點在Solr的?也許有一些代碼示例?
請,也可以考慮,即時通訊還挺新到Solr。
謝謝
謝謝你,但性能如何呢?再次刪除和添加文檔好得多嗎?我是否需要將所有字段傳遞給請求? Sry如果問題沒有意義 – Windys
您只會傳遞需要更新的字段和更新修改器(添加,設置,刪除)以應用。請參閱文檔以及此功能的限制和注意事項。就性能而言,您需要針對您的具體情況對其進行測試,因爲每個人Solr實現都有太多變量可以製作任何廣泛的性能聲明。 –
還有一個問題,如果我沒有存儲所有的字段呢?例如,由於性能問題,我將文檔的文本單獨存儲在數據庫中。 – Windys