2

问题简介:我希望 Sitecore 使用 Solr 的内置功能(由 Tika 提供)索引 PDF 的内容。我不确定如何配置 Sitecore 的索引以在 Solr(Tika) 中使用此功能。(我想我需要编写一个自定义索引器。)

我正在使用 Sitecore 7(7.1 Update 1)并希望从 PDF(或其他富媒体类型)中索引内容。我想为搜索目的索引这些数据。

我已安装 Solr (4.6.1) 并使用 Sitecore 7。当我为我的站点编制索引时,它会将所有文档保存到正确的 Solr 核心,并且我可以成功检索这些文档以进行显示。

使用curl,我可以将 PDF 发送到我的 Solr 实例并对其进行索引。

curl "http://localhost:8983/solr/update/extract?literal._id=doc1&uprefix=attr_&fmap.content=attr_content&commit=true" -F "myfile=@sample.pdf"

这行得通,我可以在我的 Sitecore Web 项目中读取此内容并将其显示在视图中,因此我知道我可以访问此数据。但是,我希望将数据附加到我在 Sitecore 中上传的项目中。

当我将 PDF 上传到 Sitecore 媒体库并发布项目时,或者至少在我重新索引站点时,我希望发生这样的事情。

我目前正在浏览以下教程以了解有关编写自定义索引的一些内容(这是第 1 部分的链接): http ://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore /Posts/2013/04/Sitecore-7-Search-Provider-Part-1-Manually-Triggered-Indexing.aspx

谢谢你的耐心。

4

3 回答 3

5

对于 Sitecore,在处理媒体数据时,Lucene 和 Solr 需要以一致的方式索引内容(以便您可以在需要时在它们之间切换,并且仍然以相同的方式获取数据索引)。由于 Tika 集成在很大程度上是 Solr 的事情,因此决定两者都应该使用 IFilters 的一般 windows 概念进行索引 ( http://en.wikipedia.org/wiki/IFilter )

这意味着只要您在进行索引的机器上安装了该 MIME 类型的正确 IFilter,那么“_content”计算字段将填充输出。

这并不意味着您不能使用 Solr Tika 集成,但默认情况下不支持它并且将是自定义的。

这将非常简单:

  1. 禁用“_content”计算字段
  2. 设置一个发布管道处理器,查看每个正在发布的项目
  3. 检查它是否是媒体项目
  4. 检查它是否是PDF
  5. 发出命令将内容推送到您的 Solr 服务器以供 Tika 索引。

您可能想查看使用 IFilter 获得的结果,如果结果与您想要的足够接近,那么您可以使用它,如果 Tika 为您产生更好的结果,那么您应该能够切换到它,尽管您可能会将您的媒体内容索引到一个单独的 Solr 核心中,因此您会丢失文档周围的任何 Sitecore 特定元数据。

一些可能有帮助的博文:

http://www.samjgriffin.com/blog/2013/11/06/sitecore-7-pdf-and-document-content-search/

http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2013/04/Sitecore-7-Indexing-Media-with-IFilters.aspx

于 2014-02-14T08:43:45.280 回答
4

我支持使用 Sitecore 的内置 MediaItemContentExtractor + IFilter 方法的建议,除非您已经出于某种原因排除了这种情况(可能是 IFilter 困难)。如果 IFilter 不是一个选项,或者如果您对其他方法感兴趣,那么我将集成 Tika 与 Stephen 建议的稍有不同。

您引用的教程涉及编写自己的搜索提供程序 - 即完全替换内置提供程序。您应该能够利用 Sitecore 的 Solr 提供程序并使用更轻量级的东西完成您需要的事情:计算索引字段。上面提到的内置媒体提取器使用这种方法,它使您可以在正常的索引过程中将任何内容放入索引中。这是 John West 的一篇博文,介绍了如何创建基本的计算索引字段:Sitecore 7: Computed Index Fields

简而言之,编写一个类来实现IComputedIndexField和表示从 PDF 或其他富文档中提取的内容。在您实施该ComputeFieldValue方法时:

  • 调用GetMediaStream()文件。
  • 在仅提取命令中将流传递给 Solr并捕获结果。
  • 返回该结果以将其存储在计算的索引字段中。

如果您需要媒体内容位于特定的现有索引字段中,则将计算字段配置为现有字段的复制字段(参见 3.3.3)。否则,将您的搜索配置为引用计算域。

这里的主要缺点是来回传递提取的内容的开销,而不是一步将其直接提交给索引。根据您的索引大小和内容,这对您来说可能不是问题。

另一种可能的选择是将媒体内容添加到现有索引文档的重建后任务。我不确定这会奏效。这取决于知道媒体项文档的 ID 并在部分文档更新中提交丰富的文档内容,但此人未成功尝试。如果您尝试这样做,请确保在清除 HTML 缓存之前在 indexing:end 事件中执行它。

无论您采用哪种方法,如果您想在比 cURL 更高的级别上使用 Tika,请查看SolrNet 的 ExtractCommand和相关类的实现。

于 2014-02-14T13:18:03.163 回答
1

如果您可以将您的站点升级到 sitecore 7.2,其中媒体项目内容将被自动索引并且无需安装相关的 IFilter,您应该阅读以下内容: sitecore 7.2 中的媒体内容索引

于 2015-08-17T07:21:41.950 回答