在urce字段中搜索Lucene.Net索引

时间:2012-02-13 12:47:36

标签: c# lucene lucene.net

我想在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....
}

但每当我搜索一个网址时,例如: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将整个流“标记”为   单一令牌。

请帮忙。迫切需要。

干杯 苏尼...

3 个答案:

答案 0 :(得分:1)

这对我有用:

 IndexReader reader = IndexReader.Open(_directory);                
 IndexSearcher indexSearcher = new IndexSearcher(reader);
 TermQuery tq= new TermQuery(new Term("Url", downloadDoc.Uri.ToString().ToLower()));                
 BooleanQuery bq = new BooleanQuery();
 bq.Add(tq, BooleanClause.Occur.SHOULD);
 TopScoreDocCollector collector = TopScoreDocCollector.create(10, true);
  

在写入索引时使用StandardAnalyzer。

这个答案对我有帮助:Lucene search by URL

答案 1 :(得分:0)

尝试在查询周围加上引号,例如。像这样:

  

“http://www.google.com/”

答案 2 :(得分:0)

使用空格或关键字分析器应该可以工作。

有人真的会搜索“http://www.Google.com”吗?似乎用户更有可能搜索“Google”。

如果他们是部分匹配,您可以随时返回整个网址。我认为标准分析器应该更适合搜索和检索URL。