gpt4 book ai didi

c# - 为什么 Lucene.NET IndexSearcher 返回零结果?

转载 作者:行者123 更新时间:2023-11-30 17:06:34 25 4
gpt4 key购买 nike

我最近开始使用 Lucene.NET,但遇到了一些问题:我使用了 IndexWriter 来索引我在 C:\\TestIndex 中的文档,我猜是这样工作因为它生成了几个 .fnm, .frq, .cfx, .tii, .tis 文件。

问题是当尝试通过它们进行简单搜索时,我永远得不到任何结果。下面是我使用的代码,

using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;
using Lucene.Net.Search;
using Lucene.Net.Store;
using Lucene.Net.Util;

//Provide the directory where index is stored
Directory directory = FSDirectory.Open(newSystem.IO.DirectoryInfo(@"C:\\TestIndex"));

IndexReader indexReader = IndexReader.Open(directory, true);
Searcher indexSearch = new IndexSearcher(indexReader);

Analyzer std = new StandardAnalyzer(Version.LUCENE_29);
QueryParser parser = new QueryParser(Version.LUCENE_29, "text", std);
Query qry = parser.Parse("morning");

// true opens the index in read only mode
Searcher srchr = new IndexSearcher(IndexReader.Open(directory, true));

TopScoreDocCollector cllctr = TopScoreDocCollector.Create(100, true);

ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;
srchr.Search(qry, cllctr);

for (int i = 0; i < hits.Length; i++)
{
int docId = hits[i].Doc;
float score = hits[i].Score;
Document doc = srchr.Doc(docId);
Console.WriteLine("Searched from Text: " + doc.Get("text"));
}

我尝试了几种方法,但我没有得到任何结果。你有什么主意吗?

下面是索引代码,

IndexWriter indexWriter = 
new IndexWriter(
luceneDir,
new StandardAnalyzer(Version.LUCENE_29),
true,
IndexWriter.MaxFieldLength.UNLIMITED);

string[] listOfFiles = Directory.GetFiles(@"C:\Projects\lucene.net-trunk\build\vs2010\demo\MyTestProject\TestDocs");

foreach (string s in listOfFiles)
{
String content = File.ReadAllText(s);
Document doc = new Document();
String title = s;

// adding title field
doc.Add(new Field("title", title, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("content", content, Field.Store.YES, Field.Index.ANALYZED));

indexWriter.AddDocument(doc);
}

indexWriter.Optimize();
indexWriter.Dispose();

最佳答案

使用 luke 检查索引以确保它有数据,您还可以执行搜索以验证您的搜索条件

http://www.getopt.org/luke/

编辑 -(Luke 将使用 lucene 和 lucene.net 索引,您需要安装 java 才能使用)

编辑

更新行

Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", std);

Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_29, "content", std);

您已将默认搜索字段设置为不存在的text

您还试图在 console.write 行中获取错误的字段

关于c# - 为什么 Lucene.NET IndexSearcher 返回零结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com