Sitecore 8.1:自定义搜索索引不通过 PDF 进行搜索

Sitecore 8.1: Custom Search Index not searching through PDF

我有一个自定义搜索索引,我想为 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 的内容实际上不是您当前项目的内容。这意味着您需要编写一个自定义计算字段来提取该媒体库项目并抓取其内容。

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

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

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

但是

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