我需要創建一個特定的索引來執行從一個繼承模板的特定字段搜索。創建索引並返回匹配結果的這部分非常簡單。Sitecore高級數據庫爬蟲字段排除
我遇到的問題是,當進行搜索時,將不會是該字段的預期匹配,因爲Lucene.NET文檔字段'_name'包含搜索條件並且正在考慮比賽。
我正在使用高級數據庫爬行程序,並且在調查中儘可能排除幾乎所有可能的字段,直到我使用盧克發現問題。
如何排除文檔字段(如'_name')可被搜索以排除這種情況,從而返回非預期的結果?
我需要創建一個特定的索引來執行從一個繼承模板的特定字段搜索。創建索引並返回匹配結果的這部分非常簡單。Sitecore高級數據庫爬蟲字段排除
我遇到的問題是,當進行搜索時,將不會是該字段的預期匹配,因爲Lucene.NET文檔字段'_name'包含搜索條件並且正在考慮比賽。
我正在使用高級數據庫爬行程序,並且在調查中儘可能排除幾乎所有可能的字段,直到我使用盧克發現問題。
如何排除文檔字段(如'_name')可被搜索以排除這種情況,從而返回非預期的結果?
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
}
不會從文檔中物理刪除字段'_name'會導致Lucene出現一些問題?雖然這會阻止搜索字段,但我認爲它也會刪除關鍵的可識別字段m Lucene。 – mservais
它沒有在我的測試中或在我用過的其他索引中沒有出現任何問題,因此不需要該字段。這是Sitecore的基礎DatabaseCrawler所做的,而不是Lucene依賴的。 –
當前在ADC中使用了一個字段級別的搜索參數來解決這個問題。仍然很高興知道排除是否仍然有可能。 – mservais