2015-12-22 71 views
2

搜索我有我想要索引PDF文件內容的自定義搜索索引。主索引似乎是索引PDF文件罰款和sitecore的內置搜索功能搜索PDF文件非常好。我似乎在嘗試索引PDF字段時遇到問題,然後搜索它的內容。Sitecore的8.1:自定義搜索索引無法通過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)); 

任何幫助是極大的讚賞。

+0

我猜你的「出版PDF」字段是某種參考場到媒體庫項目。 PDF的內容實際上不是您當前項目的內容。這意味着您需要編寫一個自定義計算字段來提取該媒體庫項目並抓取其內容。 –

+0

正確。出版PDF是一個文件字段。關於如何抓取PDF內容的指針?我確定我可以使用計算機字段來查找文件的ID,不確定是否需要抓取或提取PDF的內容。 – Freecode

回答

4

我猜你的「出版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文件中的項目重新編制索引的,或手動重新索引您的項目自定義代碼。