Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Lucene中搜索令牌流字段_C#_.net_Lucene_Lucene.net - Fatal编程技术网

C# 在Lucene中搜索令牌流字段

C# 在Lucene中搜索令牌流字段,c#,.net,lucene,lucene.net,C#,.net,Lucene,Lucene.net,我只是从Lucene开始,我觉得我对它一定有一个基本的误解,但是从样本和文档中我无法找出这个问题 我似乎无法让Lucene返回使用令牌流初始化的字段的结果,而使用字符串初始化的字段工作正常。我正在使用Lucene.NET 2.9.2 RC2 [编辑]我在最新的Java版本(3.0.3)中也尝试过这种方法,并看到了相同的行为,因此这不是端口的一些怪癖 以下是一个基本示例: Directory index = new RAMDirectory(); Document doc = new Docume

我只是从Lucene开始,我觉得我对它一定有一个基本的误解,但是从样本和文档中我无法找出这个问题

我似乎无法让Lucene返回使用
令牌流初始化的字段的结果,而使用
字符串初始化的字段工作正常。我正在使用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
s)

这不会返回任何结果

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

doc.Add(new Field("fieldName", "Field Value Goes Here", Field.Store.NO, Field.Index.ANALYZED));
然后,正如我所预料的那样,查询返回一个命中。如果我使用
文本阅读器
版本,它也可以工作


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

我已经找到了答案


StandardAnalyzer
创建的令牌流在直接创建
StandardTokenizer
时有一个
LowerCaseFilter
而不应用这样的过滤器。

不仅如此,StandardAnalyzer还通过StopFilter过滤掉常见的英语停止词。Lucene的经验法则是在两侧使用完全相同的TokenStreams设置进行搜索和索引。在代码中,不应直接实例化StandardTokenizer,而应使用StandardAnalyzer.TokenStream()创建它