作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 lucene.net 很陌生。我用 C# 编写了这个简单的控制台应用程序,它索引了一些假数据。然后我希望能够使用 bool 查询搜索各种术语的索引。
我从来没有得到任何结果。这是代码。任何帮助将不胜感激。谢谢。
static void Main(string[] args)
{
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriter writer = new IndexWriter("Test", analyzer, true);
Console.WriteLine("Creating index");
for (int i = 0; i < 1500; i++)
{
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
doc.Add(new Lucene.Net.Documents.Field("A", i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NO));
doc.Add(new Lucene.Net.Documents.Field("B", "LALA" + i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NO));
doc.Add(new Lucene.Net.Documents.Field("C", "DODO" + i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NO));
doc.Add(new Lucene.Net.Documents.Field("D", i.ToString() + " MMMMM", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.NO));
writer.AddDocument(doc);
}
writer.Optimize();
writer.Close();
BooleanQuery query = new BooleanQuery();
query.Add(new WildcardQuery(new Term("B", "lala*")), Lucene.Net.Search.BooleanClause.Occur.MUST);
query.Add(new WildcardQuery(new Term("C", "DoDo1*")), Lucene.Net.Search.BooleanClause.Occur.MUST);
IndexSearcher searcher = new IndexSearcher("Test");
Hits hits = searcher.Search(query);
if (hits.Length() > 0)
{
for (int i = 0; i < hits.Length(); i++)
{
Console.WriteLine("{0} - {1} - {2} - {3}",
hits.Doc(i).GetField("A").StringValue(),
hits.Doc(i).GetField("B").StringValue(),
hits.Doc(i).GetField("C").StringValue(),
hits.Doc(i).GetField("D").StringValue());
}
}
searcher.Close();
Console.WriteLine("Done");
Console.ReadLine();
}
static void Main(string[] args)
{
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriter writer = new IndexWriter("Test", analyzer, true);
Console.WriteLine("Creating index");
for (int i = 0; i < 1500; i++)
{
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
doc.Add(new Lucene.Net.Documents.Field("A", i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
doc.Add(new Lucene.Net.Documents.Field("B", "LALA" + i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
doc.Add(new Lucene.Net.Documents.Field("C", "DODO" + i.ToString(), Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
doc.Add(new Lucene.Net.Documents.Field("D", i.ToString() + " MMMMM", Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.TOKENIZED));
writer.AddDocument(doc);
}
writer.Optimize();
writer.Close();
BooleanQuery.SetMaxClauseCount(5000);
Query query = MultiFieldQueryParser.Parse(new string[] { "LALA*", "DODO*" }, new string[] { "B", "C" }, analyzer);
IndexSearcher searcher = new IndexSearcher("Test");
Hits hits = searcher.Search(query);
if (hits.Length() > 0)
{
for (int i = 0; i < hits.Length(); i++)
{
Console.WriteLine("{0} - {1} - {2} - {3}",
hits.Doc(i).GetField("A").StringValue(),
hits.Doc(i).GetField("B").StringValue(),
hits.Doc(i).GetField("C").StringValue(),
hits.Doc(i).GetField("D").StringValue());
}
}
searcher.Close();
Console.WriteLine("Done");
Console.ReadLine();
}
最佳答案
我认为构建索引时存在问题。您向每个文档添加四个字段,所有字段都已存储,但没有索引(=> Lucene.Net.Documents.Field.Index.NO)。您应该至少在字段上建立索引。
请注意,StandardAnalyzer 以下列方式标记每个字段索引:使用常见的英语停用词小写和拆分。因此,在构建查询时,请使用 LOWERCASE 前缀以获得命中:
query.Add(new PrefixQuery(new Term("B", "lala")), BooleanClause.Occur.MUST);
query.Add(new PrefixQuery(new Term("C", "dodo")), BooleanClause.Occur.MUST);
关于Lucene.Net 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1846343/
我是一名优秀的程序员,十分优秀!