使用Sitecore Advanced Database Crawler作为NumericField索引

时间:2013-02-11 12:28:26

标签: sitecore lucene.net lucene

我需要使用lucene范围查询搜索价格字段。然而,由于我在Lucene.Net API中使用TermRangeQuery,因此它给出的结果不准确或不一致。我相信使用NumericRangeQuery我可以得到准确的结果。要使用NumericRangeQuery,需要使用NumericField对字段建立索引。有没有办法可以使用Advanced Database Crawler执行此操作。 我试图通过改变高级数据库爬虫源代码来做到这一点,但它不适合我。

这些是我在高级数据库抓取工具中所做的更改。在CreateField方法的scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler类中,我添加了以下代码。

if (name.EndsWith("numeric"))
{
    field = new NumericField(name, storageType, true);
}

在索引配置中,我给出了字段名称,并在其中附加了文本“numeric”。但是我通过删除“数字”部分正确传递了字段名。

构建索引时,我得到这样的错误。

Job started: RebuildSearchIndex|System.NullReferenceException: Object reference not set to an instance of an object.
   at Lucene.Net.Store.IndexOutput.WriteString(String s)
   at Lucene.Net.Index.FieldsWriter.WriteField(FieldInfo fi, Fieldable field)
   at Lucene.Net.Index.StoredFieldsWriterPerThread.AddField(Fieldable field, FieldInfo fieldInfo)
   at Lucene.Net.Index.DocFieldProcessorPerThread.ProcessDocument()
   at Lucene.Net.Index.DocumentsWriter.UpdateDocument(Document doc, Analyzer analyzer, Term delTerm)
   at Lucene.Net.Index.DocumentsWriter.AddDocument(Document doc, Analyzer analyzer)
   at Lucene.Net.Index.IndexWriter.AddDocument(Document doc, Analyzer analyzer)
   at Lucene.Net.Index.IndexWriter.AddDocument(Document doc)
   at Sitecore.Search.IndexUpdateContext.AddDocument(Document document)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddItem(Item item, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Index.Rebuild()
   at Sitecore.Shell.Applications.Search.RebuildSearchIndex.RebuildSearchIndexForm.Builder.Build()|Job ended: RebuildSearchIndex (units processed: 1)

有人可以使用高级数据库抓取工具告诉我一种方法吗?

先谢谢

1 个答案:

答案 0 :(得分:3)

即使我无法索引作为数字字段找到解决问题的方法。它是使用填充零进行索引,因此lucene TermRangeQuery会给出正确的搜索结果。每个价格都使用填充零进行索引,因此每个值将包含10位数。这样我得到的结果是准确的。