繁体   English   中英

Lucene.net按数值搜索(作为字符串)

[英]Lucene.net search by numeric value(as string)

我用文本和数字为文档编制索引。 要创建索引,我使用

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

我使用Snoschballanalyzer,因为我需要形态(表格-表格)。 当我在索引中搜索文本时-找到了文本,但是没有找到数值。 我找到了一个解决方案-Lucene-搜索数值字段 ,但是有必要为数值创建一个单独的字段。 我现在不需要搜索一定范围的数值。 我想找到一个数值作为字符串。 示例-源文本:“他出生于1990年”。 我需要根据要求“出生”和“ 1990”找到此tesxt。

您不必做任何特别的事情。

这里有一些代码可以满足您的需求。

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM