gpt4 book ai didi

c# - 在 Lucene 中搜索 TokenStream 字段

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

我刚开始使用 Lucene,我觉得我一定对它有根本的误解,但是从示例和文档中我无法弄清楚这个问题。

我似乎无法让 Lucene 为使用 TokenStream 初始化的字段返回结果,而使用 string 初始化的字段工作正常。我正在使用 Lucene.NET 2.9.2 RC2。

[编辑] 我也用最新的 Java 版本 (3.0.3) 尝试过这个并且看到了相同的行为,所以这不是端口的一些怪癖。

这是一个基本的例子:

Directory index = new RAMDirectory();
Document doc = new Document();
doc.Add(new Field("fieldName", new StandardTokenizer(new StringReader("Field Value Goes Here"))));
IndexWriter iw = new IndexWriter(index, new StandardAnalyzer());
iw.AddDocument(doc);
iw.Commit();
iw.Close();
Query q = new QueryParser("fieldName", new StandardAnalyzer()).Parse("value");
IndexSearcher searcher = new IndexSearcher(index, true);
Console.WriteLine(searcher.Search(q).Length());

(我意识到这使用了 2.9 中不推荐使用的 API,但这只是为了简洁...假装指定版本的参数在那里,我使用新的 Search 之一)。

这不会返回任何结果。

但是,如果我将添加字段的行替换为

doc.Add(new Field("fieldName", "Field Value Goes Here", Field.Store.NO, Field.Index.ANALYZED));

然后查询返回命中,如我所料。如果我使用 TextReader 版本,它也可以工作。

这两个字段都被索引和标记化,使用(我认为)相同的标记器/分析器(我也尝试过其他的),并且都没有存储,所以我的直觉是它们应该表现相同。我错过了什么?

最佳答案

我找到了套管的答案。

StandardAnalyzer 创建的 token 流有一个LowerCaseFilter,而直接创建StandardTokenizer 不应用这样的过滤器。

关于c# - 在 Lucene 中搜索 TokenStream 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149079/

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