Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
含Solr和Tika的PDF索引内容_Solr_Sitecore_Sitecore7_Apache Tika_Sitecore7.1 - Fatal编程技术网

含Solr和Tika的PDF索引内容

含Solr和Tika的PDF索引内容,solr,sitecore,sitecore7,apache-tika,sitecore7.1,Solr,Sitecore,Sitecore7,Apache Tika,Sitecore7.1,简单地说就是这个问题:我希望Sitecore使用Solr的内置功能(由Tika提供)为PDF的内容编制索引。我不知道如何配置Sitecore的索引以在Solr(Tika)中使用此功能。(我想我需要编写一个自定义索引器。) 我正在使用Sitecore 7(7.1更新1),希望为PDF(或其他富媒体类型)中的内容编制索引。我想为这些数据编制索引,以便于搜索 我已安装Solr(4.6.1)并使用Sitecore 7。当我为我的站点编制索引时,它会将所有文档保存到正确的Solr核心,并且我可以成功地检索

简单地说就是这个问题:我希望Sitecore使用Solr的内置功能(由Tika提供)为PDF的内容编制索引。我不知道如何配置Sitecore的索引以在Solr(Tika)中使用此功能。(我想我需要编写一个自定义索引器。)

我正在使用Sitecore 7(7.1更新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部分的链接):


感谢您的耐心。

对于Sitecore,在处理媒体数据时,Lucene和Solr需要以一致的方式对内容进行索引(以便您可以在需要时在它们之间切换,并且仍然以相同的方式对数据进行索引)。由于Tika集成在很大程度上是一种解决方案,因此决定两者都应使用IFilter的通用windows概念来编制索引()

这意味着,只要在进行索引的计算机上安装了该mime类型的正确IFilter,则“\u content”computed字段将填充输出

这并不意味着不能使用Solr Tika集成,但默认情况下不支持它,这将是一种定制

这将非常简单:

  • 禁用“\u内容”计算字段
  • 设置一个发布管道处理器,用于查看要发布的每个项目
  • 检查它是否是媒体项
  • 检查是否为PDF格式
  • 发出命令将内容推送到Solr服务器,以便Tika编制索引
  • 你可能想看看通过使用IFilter得到了什么结果,如果结果足够接近你想要的结果,那么你可以这样做,如果Tika为你产生了更好的结果,那么你应该能够切换到它,尽管您可能会在单独的Solr core中对媒体内容进行索引,因此您可能会丢失文档中任何特定于Sitecore的元数据

    一些可能有用的博客帖子:


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

    您参考的教程涉及编写自己的搜索提供程序,即完全替换内置提供程序。您应该能够利用Sitecore的Solr提供程序,并使用更轻的工具完成所需的工作:计算索引字段。上面提到的内置媒体提取器使用这种方法,它使您能够在正常索引过程中将任何内容放入索引中。下面是John West的一篇博文,介绍了如何创建一个基本的计算索引字段:

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

    • 对文档调用
      GetMediaStream()
    • 将流以一种方式传递给Solr并捕获结果
    • 返回该结果以将其存储在计算索引字段中
    如果您需要媒体内容位于特定的现有索引字段中,则将计算字段配置为现有字段中的。否则,请将搜索配置为引用计算字段

    这里的主要缺点是来回传递提取的内容,而不是在单个步骤中将其直接提交到索引。根据您的索引大小和内容,这可能不是您的问题

    另一个可能的选择是重建后任务,将媒体内容添加到现有索引文档中。我不确定这是否行得通。这取决于知道媒体项文档的ID并在中提交富文档内容,但尝试失败。如果尝试此操作,请确保在清除HTML缓存之前在index:end事件中执行它


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

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