3

我需要使用 lucene 范围查询来搜索价格字段。然而,它给出的结果并不准确或一致,因为我在 Lucene.Net API 中使用了 TermRangeQuery。我相信使用 NumericRangeQuery 可以获得准确的结果。要使用 NumericRangeQuery,需要使用 NumericField 对该字段进行索引。有没有办法可以使用 Advanced Database Crawler 来做到这一点。我试图通过更改 Advanced Database Crawler 源代码来做到这一点,但它对我不起作用。

这些是我在 Advanced Database Crawler 中所做的更改。在 CreateField 方法的 scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler 类中,我添加了以下代码。

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

在索引配置中,我给出了字段名称 name 并将文本“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)

有人可以告诉我使用高级数据库爬虫的方法吗?

提前致谢

4

1 回答 1

3

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

于 2013-02-12T13:30:50.927 回答