2

我需要创建一个特定的索引来从继承的模板中对特定字段执行搜索。创建索引和返回匹配结果的那部分是相当直接的。

我遇到的问题是,在进行与该字段不匹配的搜索时,我得到了错误的结果,因为 Lucene.NET 文档字段“_name”包含搜索条件并且正在考虑匹配。

我正在使用 Advanced Database Crawler,并且在调查中尽可能排除了几乎所有可能的字段,直到我使用 Luke 来发现问题。

如何将“_name”等文档字段排除在可搜索范围之外,以排除这种情况,以免返回不希望的结果?

4

1 回答 1

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");
            ...
        }
}

在这种情况下,字段是在“AddAllFields”之后添加的。它发生在“AddSpecialFields”中,因此您可以执行以下操作:

protected override void AddSpecialFields(Document document, Sitecore.Data.Items.Item item)
{
    // Do nothing, don't call base.AddSpecialFields
}
于 2012-11-18T06:18:31.970 回答