我有一个文档索引,分布在几个分片和副本上 . 大小是ca. 40密耳,我希望它会增长
Problem :用户向这些文档添加信息,这些文档经常更改 . 他们需要将其集成到搜索语法中,例如 funny and cool and cat:interesting
. cat将是易失性数据集
据我所知,Solr和Lucene都不支持“真正的更新”,这意味着我必须重新索引整套更改的文档 . 因此,我需要将它连接到外部数据源,如关系数据库 .
我在Lucene做了可扩展搜索(http://lucene.apache.org/core/4_3_0/queryparser/index.html) . 算法非常简单:
通过将"_"添加到所有外部字段来
-
预处理查询
-
将这些字段映射到类
-
每个类扩展org.apache.lucene.search.Filter类并通过重写public
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException
将id转换为bitset:
ResultSet set = state.executeQuery();
OpenBitSet bitset = new OpenBitSet();
while (set.next()) {
bitset.set(set.getInt("ID"));
}
- 然后通过扩展org.apache.lucene.queryparser.ext.ParserExtension,我覆盖这样的解析:
public Query parse(ExtensionQuery eq) throws ParseException{ String cat= eq.getRawQueryString(); Filter filter = _cache.getFilter(cat); return new ConstantScoreQuery(filter); }
- 使用add方法和done扩展org.apache.lucene.queryparser.ext.Extensions .
但 HOW 要在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有点新意 .
谢谢
1 回答
Solr 4.x发布所有支持Atomic Update,我相信可以满足您的需求 .