Solr中的易失性数据

时间:2013-05-15 12:02:07

标签: java solr lucene

我有一个文档索引,分布在多个分片和副本上。大小是ca. 40密耳,我希望它会增长

问题:用户向这些文档添加信息,这些信息会经常更改。他们需要将其集成到搜索语法中,例如funny and cool and cat:interesting。 cat将是易失性数据集

据我所知,Solr和Lucene都不支持“真正的更新”,这意味着我必须重新索引整套更改过的文档。因此,我需要将它连接到外部数据源,如关系数据库。

我在Lucene中使用可扩展搜索(http://lucene.apache.org/core/4_3_0/queryparser/index.html)完成了这项工作。算法非常简单:

  1. 通过向所有外部字段添加“_”进行预处理查询
  2. 将这些字段映射到类
  3. 每个类都扩展了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"));
        }
    
  4. 然后通过扩展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); }

  5. 使用add方法扩展org.apache.lucene.queryparser.ext.Extensions并完成。
  6. 如何在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)对我来说看起来有点建设。
    3. 任何想法如何在Solr中做到?也许有一些代码示例?

      请注意,我对Solr来说是个新手。

      谢谢

1 个答案:

答案 0 :(得分:1)

Solr 4.x发布了我认为可能满足您需求的所有支持Atomic Update