Я хочу найти в индексе Lucene.net сохраненное поле URL. Мой код указан ниже:
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 "токенизирует" весь поток как
одиночный токен.
Пожалуйста, помогите. Это срочно.
* * 1025 Приветствия
Сунил ...