C# 如何读取Lucene.net返回的查询结果
我不知道如何读取Lucene.net查询返回的结果 我有以下代码: 初始化C# 如何读取Lucene.net返回的查询结果,c#,asp.net,.net,lucene,lucene.net,C#,Asp.net,.net,Lucene,Lucene.net,我不知道如何读取Lucene.net查询返回的结果 我有以下代码: 初始化 var test = new Document(); test.Add(new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED)); test.Add(new Field("title", "the title", Field.Store.YES, Field.Index.ANALYZED));
var test = new Document();
test.Add(new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED));
test.Add(new Field("title", "the title", Field.Store.YES, Field.Index.ANALYZED));
test.Add(new Field("body", "the body of the question", Field.Store.YES, Field.Index.ANALYZED));
string path = HttpRuntime.AppDomainAppPath + "\\LuceneIndex";
Lucene.Net.Store.Directory directory = FSDirectory.Open(new DirectoryInfo(path));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
var writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.LIMITED);
writer.AddDocument(test);
writer.Optimize();
writer.Flush(true, true, true);
writer.Dispose();
directory.Dispose();
analyzer.Dispose();
读取数据
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
QueryParser parser = new QueryParser(Version.LUCENE_30, "ti", analyzer);
string path = HttpRuntime.AppDomainAppPath + "\\LuceneIndex";
Lucene.Net.Store.Directory directory = FSDirectory.Open(new DirectoryInfo(path));
IndexSearcher searcher = new IndexSearcher(directory);
Query query = new TermQuery(new Term("body", "body"));
TopDocs docs = searcher.Search(query,5);
analyzer.Dispose();
searcher.Dispose();
我检查了
文档中的数据,但它不包含匹配搜索结果的Id。您可以按如下方式获取结果:
IndexSearcher searcher=newindexsearcher(目录);
查询查询=新术语查询(新术语(“正文”、“正文”));
TopDocs=searcher.Search(查询,5);
//获取顶级文档的id和分数
ScoreDocs[]结果=docs.ScoreDocs
foreach(结果中的ScoreDoc项)
{
//获取lucene docID
int luceneID=item.Doc
//从索引中获取文档ID的实际文档
Document doc=searcher.doc(luceneID);
}
Lucene(.Net)对索引文档有自己独特的docid,它独立于ID字段中存储的ID。您可以通过调用searcher.Doc(int-docID)
访问实际文档及其存储字段,或者对于IndexReader
,您可以调用reader.Doc(int-docID)
您的查询字符串ti
,它与索引中的任何内容都不匹配。您是否知道StandardAnalyzer
执行的标记化,以及一般的分析器是什么?@lucastrezesniewski文档的TotalHits为1,因此我假设它找到了文档。我不知道StandardAnalyzerHmm执行的标记化。。老实说,我不明白为什么存储在索引中的文档会与查询匹配。查询解析器生成一个TermQuery
,它只能匹配一个完整的术语——在您的例子中,它大致相当于一个完整的单词。如果你不知道分析仪是做什么的,我建议你读一读,因为了解它非常重要。此外,您还可以使用Luke工具查看索引中存储的内容。