【问题标题】:Lucene.net search by numeric value(as string)Lucene.net 按数值搜索(作为字符串)
【发布时间】:2023-03-17 04:28:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# search lucene.net numeric


    【解决方案1】:

    你不应该做任何特别的事情。

    这里有一些代码可以完成您似乎想要实现的目标。

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

    【讨论】:

    • 谢谢。这条鳕鱼有效。我的程序适用于两种语言。当我搜索的语言数量没有正确确定。那是我的问题。我会明白的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多