【问题标题】:How do I extend Apache Solr's ExtractingRequestHandler to extract content from Protocol Buffer files?如何扩展 Apache Solr 的 ExtractingRequestHandler 以从协议缓冲区文件中提取内容?
【发布时间】:2015-12-01 11:21:33
【问题描述】:

我已经设置了 SolrCloud 的一个实例。现在我想索引协议缓冲区格式的文件中的内容,并使用 stored=true 属性将它们存储在 Solr 中。存储二进制文档很容易。现在我如何继续指示 solr 从协议缓冲区文件中提取内容? 我知道我们可以扩展 ExtractingRequestHandler 来做同样的事情,但我无法在 wiki 页面上找到关于这样做的全面文档:http://wiki.apache.org/solr/ExtractingRequestHandler

【问题讨论】:

    标签: solr


    【解决方案1】:

    我不会扩展 ExtractingRequestHandler,而是使用 SolrJ。这样你就可以做任何你想做的事情,你的客户端将在一个单独的 JVM 中运行,它会提取内容(使用你最喜欢的库),最后它会连接到 Solr。像这样的:

    // Extract content from PB files
    String content = extractContentFromPBFiles();
    
    // The facade towards Solr
    SolrClient client = ...
    
    // The Input value object (i.e. a Solr Document that needs to be indexed)
    SolrInputDocument doc = new SolrInputDocument();
    doc.setField("id", <your id>);
    doc.setField("content", content);
    
    // Add
    client.add(doc);
    
    // Commit (you may want to avoid this in case of massive inserts)
    client.commit();
    

    【讨论】:

    • 谢谢安德里亚。我已经在提取内容,但我不知道如何存储原始文档(即在 Solr 中将我的原始 PB 文件存储为二进制 blob)。有什么线索吗?
    • 在示例模式中有一个二进制字段(我从未使用过)我猜它使用 base64 对二进制内容进行编码。你确定你真的需要索引二进制内容吗?通常人们将这些数据保留在 Solr 之外,在查询时检索每个匹配结果所需的内容
    • 我将index=falsestored=true 用于二进制内容,因为我的文件数量非常大:超过 500 万个,我觉得 solr 可以更好地存储它们(因为它可以压缩并存储索引以外的其他文件中的内容)而不是文件系统。
    • 嗯“比文件系统更好”?你确定吗?存储的字段是逐字复制的,如果我的猜测是正确的,那么 base64 在磁盘空间方面的效率并不高
    • 我曾经认为文件系统在存储二进制内容方面比 Solr 更好,但在 IRC 上的一次聊天足以改变我的直觉。不幸的是,我现在没有太多细节。参数是文件系统需要搜索层次结构中的每个级别,但 Solr 不需要。 (我忘记了内部细节,但 Solr 比文件系统更高效)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多