【问题标题】:Sitecore 8.1: Custom Search Index not searching through PDFSitecore 8.1:自定义搜索索引未通过 PDF 进行搜索
【发布时间】:2015-12-22 11:51:21
【问题描述】:

我有一个自定义搜索索引,我想索引 pdf 文件内容。主索引似乎可以很好地索引 pdf 文件,并且 sitecore 的内置搜索功能可以很好地搜索 pdf 文件。我似乎在尝试索引 PDF 字段然后搜索它的内容时遇到问题。

在我的 indexConfiguration 我按名称添加文件

<fieldNames hint="raw:AddFieldByFieldName">
  <field fieldName="publication pdf" storageType="YES" indexType="TOKENIZED" vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" />
    ...
</fieldNames>

我的结果项包含索引字段定义

[IndexField("publication pdf")]
public virtual string PDF { get; set; }

但是,当我创建搜索上下文并尝试在 PDF 中查找内容时,我得到 0 个结果。

var query = context.GetQueryable<ResultItem>();
query = query.Where(p => p.PDF.Equals(SearchString));

非常感谢任何帮助。

【问题讨论】:

  • 我猜您的“Publication PDF”字段是媒体库项目的某种参考字段。 PDF 的内容实际上不是您当前项目的内容。这意味着您需要编写一个自定义计算字段来提取该媒体库项目并抓取其内容。
  • 正确。出版物 PDF 是一个文件字段。有关如何抓取 PDF 内容的任何指示?我确定我可以使用计算机字段来查找文件的 ID,不确定是否必须抓取或提取 PDF 的内容。

标签: pdf search indexing sitecore sitecore8


【解决方案1】:

我猜您的“Publication PDF”字段是媒体库项目的某种参考字段。 PDF 的内容实际上不是您当前项目的内容。这意味着您需要编写一个自定义计算字段来提取该媒体库项目并抓取其内容。

如果您想抓取媒体项目的内容,您可能需要使用一些反射器来检查Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor 类的代码。 Sitecore 使用它来获取媒体项目的内容,如Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config 中所定义:

<field fieldName="_content" type="Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor,Sitecore.ContentSearch">
  <mediaIndexing ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration/mediaIndexing"/>
</field>

您需要先获取媒体项目,然后使用从此类复制的代码来获取 PDF 的内容。

但是

是的,总是有but。如果媒体库项目已更改而您的项目未更改,则您的项目不会自动重新索引。因此,如果您打算更改 pdf(上传新项目并选择它应该没问题),您需要考虑自定义代码来执行对包含您的 pdf 文件引用的项目进行重新索引,或者手动重新索引您的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多