2013-02-11 49 views
3

我需要使用lucene範圍查詢來搜索價格字段。但是,由於我在Lucene.Net API中使用了TermRangeQuery,因此它提供的結果不準確或不一致。我相信使用NumericRangeQuery我可以得到準確的結果。要使用NumericRangeQuery,該字段需要使用NumericField進行索引。有沒有一種方法可以使用高級數據庫爬網程序執行此操作。 我試圖通過改變高級數據庫爬蟲源代碼來做到這一點,但它並不適合我。使用Sitecore高級數據庫爬蟲作爲NumericField索引

這些是我在高級數據庫爬行程序中所做的更改。在CreateField方法的scSearchContrib.Crawler.Crawlers.AdvancedDatabaseCrawler類中,我添加了以下代碼。

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

在索引配置中,我給出了字段名稱的名稱並在其中附加了文本「數字」。但是,我通過刪除「數字」部分正確傳遞字段名稱。

構建索引時出現這樣的錯誤。

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) 

有人能告訴我一種方法來使用高級數據庫爬蟲做這個嗎?

由於提前

+0

請將您嘗試的修改添加到高級數據庫抓取工具中,並詳細說明發生了什麼(拋出異常,結果沒有變化等) – 2013-02-11 13:03:47

回答

3

即使我不能索引作爲數字字段中找到一個變通的問題。這是索引填充零,所以lucene TermRangeQuery給出正確的搜索結果。每個價格都用填充的零索引,因此每個值都會包含10位數字。這樣我得到的結果是準確的。