通过数字值(作为字符串)进行搜索

本文关键字:字符串 搜索 数字 | 更新日期: 2023-09-27 18:12:42

用文本和数字对文档进行索引。要创建索引,我使用

 analyser = new SnowballAnalyzer(Version.LUCENE_30, "English"); 

我使用Snoschballanalyzer因为我需要形态学(表-表)。当我在索引中搜索文本时-我找到了文本,但没有找到数值。我找到了一个解决方案- Lucene -搜索一个数值字段,但有必要为数值创建一个单独的字段。我现在不需要搜索数值范围。我想找到一个字符串形式的数值。例-源文本:"他出生于1990年"。我需要根据要求找到这篇文章"出生"answers"1990"。

通过数字值(作为字符串)进行搜索

你不需要做任何特别的事情。

这里有一些代码可以实现你想要实现的目标。

RAMDirectory dir = new RAMDirectory();
IndexWriter iw = new IndexWriter(dir, new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30,"English"), IndexWriter.MaxFieldLength.UNLIMITED);
Document d = new Document();
Field f = new Field("text", "", Field.Store.YES, Field.Index.ANALYZED);
d.Add(f);
f.SetValue("He was born 1990 years");
iw.AddDocument(d);
iw.Commit();
IndexReader reader = iw.GetReader();
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser qp = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "text", new SnowballAnalyzer(Lucene.Net.Util.Version.LUCENE_30, "English"));
Query q = qp.Parse("+born +1990");
TopDocs td = searcher.Search(q, null, 25);
foreach (var sd in td.ScoreDocs)
{
    Console.WriteLine(searcher.Doc(sd.Doc).GetField("text").StringValue);
}
searcher.Dispose();
reader.Dispose();
iw.Dispose();