我想爲一個存儲的url字段搜索一個Lucene.net索引。我的代碼如下:搜索一個url字段的Lucene.Net索引
Field urlField = new Field("Url", url.ToLower(), Field.Store.YES,Field.Index.TOKENIZED);
document.Add(urlField);`
indexWriter.AddDocument(document);
我正在使用上面的代碼寫入索引。
而下面的代碼在索引中搜索Url。
Lucene.Net.Store.Directory _directory = FSDirectory.GetDirectory(Host, false);
IndexReader reader = IndexReader.Open(_directory);
KeywordAnalyzer _analyzer = new KeywordAnalyzer();
IndexSearcher indexSearcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("Url", _analyzer);
Query query = parser.Parse("\"" + downloadDoc.Uri.ToString() + "\"");
TopDocs hits = indexSearcher.Search(query, null, 10);
if (hits.totalHits > 0)
{
//statements....
}
但每當我搜索的URL例如:http://www.xyz.com/
,我沒有得到任何命中。
不知何故,找出了替代方案。但是這隻適用於索引中只有一個文檔的情況。如果有更多的文件,下面的代碼將不會產生正確的結果。有任何想法嗎?請幫助
在寫索引,使用KeywordAnalyzer()
KeywordAnalyzer _analyzer = new KeywordAnalyzer();
indexWriter = new IndexWriter(_directory, _analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
然後同時搜索,使用KeywordAnalyzer()
IndexReader reader = IndexReader.Open(_directory);
KeywordAnalyzer _analyzer = new KeywordAnalyzer();
IndexSearcher indexSearcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("Url", _analyzer);
Query query = parser.Parse("\"" + url.ToString() + "\"");
TopDocs hits = indexSearcher.Search(query, null, 1);
這是因爲KeywordAnalyzer 「標記化」 的全流作爲 單個令牌。
請大家幫忙。這很緊急。
乾杯 蘇尼爾...
的Lucene索引值,而不是存儲的值相匹配。你如何索引該領域? – sisve 2012-02-13 14:20:03
你的_analyzer做什麼? – SharpBarb 2012-02-13 14:41:52
我想搜索一個url是否已經編入索引。如果是,我將替換存儲的「內容」。 url可以是任何格式:'http:// www.xyz.com /'或'http:// www.xyz.com/page1 /'等。 _analyzer是StandardAnalyzer – 2012-02-14 03:50:20