2012-11-05 56 views
2

我需要創建一個特定的索引來執行從一個繼承模板的特定字段搜索。創建索引並返回匹配結果的這部分非常簡單。Sitecore高級數據庫爬蟲字段排除

我遇到的問題是,當進行搜索時,將不會是該字段的預期匹配,因爲Lucene.NET文檔字段'_name'包含搜索條件並且正在考慮比賽。

我正在使用高級數據庫爬行程序,並且在調查中儘可能排除幾乎所有可能的字段,直到我使用盧克發現問題。

如何排除文檔字段(如'_name')可被搜索以排除這種情況,從而返回非預期的結果?

+0

當前在ADC中使用了一個字段級別的搜索參數來解決這個問題。仍然很高興知道排除是否仍然有可能。 – mservais

回答

0

Lucene文檔具有RemoveField方法。在您的自定義DatabaseCrawler你可以正常地從文檔中刪除字段:

public class MyCustomCrawler : Sitecore.Search.Crawlers.DatabaseCrawler 
{ 
     protected override void AddAllFields(Lucene.Net.Documents.Document document, Sitecore.Data.Items.Item item, bool versionSpecific) 
     { 
      document.RemoveField("SomeFieldName"); 
      ... 
     } 
} 

在這種情況下,字段後添加AddSpecialFields‘這樣你就可以做這樣的事情「AddAllFields'它發生在’:

protected override void AddSpecialFields(Document document, Sitecore.Data.Items.Item item) 
{ 
    // Do nothing, don't call base.AddSpecialFields 
} 
+0

不會從文檔中物理刪除字段'_name'會導致Lucene出現一些問題?雖然這會阻止搜索字段,但我認爲它也會刪除關鍵的可識別字段m Lucene。 – mservais

+0

它沒有在我的測試中或在我用過的其他索引中沒有出現任何問題,因此不需要該字段。這是Sitecore的基礎DatabaseCrawler所做的,而不是Lucene依賴的。 –