Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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.Net中的文本/字符串值?_C#_Lucene_Lucene.net - Fatal编程技术网

C# 为什么过滤器不能处理Lucene.Net中的文本/字符串值?

C# 为什么过滤器不能处理Lucene.Net中的文本/字符串值?,c#,lucene,lucene.net,C#,Lucene,Lucene.net,我在Lucene.Net中做了一个过滤器来限制搜索结果。我遇到了一个非常奇怪的问题。过滤器不使用文本值,而是使用数字值 例如: 如果我制作一个带有如下数值的过滤器。它工作得很好 String field = "id"; Filter LE= new QueryWrapperFilter(new TermQuery( new Term(field, "1234567"))); indexSearcher.Search(QueryMaker(searchString, searchfields),

我在Lucene.Net中做了一个过滤器来限制搜索结果。我遇到了一个非常奇怪的问题。过滤器不使用文本值,而是使用数字值

例如:

如果我制作一个带有如下数值的过滤器。它工作得很好

String field = "id";
Filter LE= new QueryWrapperFilter(new TermQuery( new Term(field, "1234567")));
indexSearcher.Search(QueryMaker(searchString, searchfields), LE, coll);
但是,如果我给出一个包含文本的值

String field = "id";
Filter LE = new QueryWrapperFilter(new TermQuery(new Term(field, "ZZZOCB9X9Y")));
indexSearcher.Search(QueryMaker(searchString, searchfields), LE, coll);
它正在失败。结果不显示任何记录


谁能给我解释一下这个问题吗。此外,我已经多次测试过它,以证明这一点。我在一些论坛上读到,3以下Lucene版本中的术语查询可能会有这个问题。但是,我已将版本更改为3.0.3,但错误仍然存在。我急需程序中的过滤器才能工作。否则,我将不得不离开Lucene,找到其他东西。

StandardAnalyzer
将把您的
令牌流中的所有字符都小写

试试这个:

Filter LE = new QueryWrapperFilter(new TermQuery(new Term(field, "ZZZOCB9X9Y".ToLowerInvariant())));

StandardAnalyzer
将把
TokenStream
中的所有字符小写

试试这个:

Filter LE = new QueryWrapperFilter(new TermQuery(new Term(field, "ZZZOCB9X9Y".ToLowerInvariant())));

我也尝试过所有其他过滤器。偶数布尔滤波器。它根本不适用于文本值。为内容编制索引时,您使用的是哪个
Analyzer
?这可能是因为您正在使用的标记没有生成您期望的标记(例如,将文本转换为小写)。还有,为什么要使用QueryMaker?我想到了一些更简单的东西,比如
stringfield=“id”;搜索(新术语查询(新术语(字段,“ZZZOCB9X9Y”))也可以工作,尽管我不使用Lucene.net,只使用Lucene Core(Java)。如果可以避免的话,就不应该使用过滤器,因为查询会提供更好的性能。此外,使用
TermQuery
将发送针对Lucene的原始值,需要它进行字面匹配。你能试试<代码> QueryParser < /代码>吗?同样,你应该考虑添加一个如果你的问题没有得到足够的关注。谢谢你来到这里。我用的是标准分析仪。标准Analyzer是否会显示文本值?此外,正如您所看到的,我的值是文本值和数值的组合。QueryMaker是一种在搜索值后返回权重的方法。另外,我的问题是过滤器而不是搜索器。我也尝试过所有其他过滤器。偶数布尔滤波器。它根本不适用于文本值。为内容编制索引时,您使用的是哪个
Analyzer
?这可能是因为您正在使用的标记没有生成您期望的标记(例如,将文本转换为小写)。还有,为什么要使用QueryMaker?我想到了一些更简单的东西,比如
stringfield=“id”;搜索(新术语查询(新术语(字段,“ZZZOCB9X9Y”))也可以工作,尽管我不使用Lucene.net,只使用Lucene Core(Java)。如果可以避免的话,就不应该使用过滤器,因为查询会提供更好的性能。此外,使用
TermQuery
将发送针对Lucene的原始值,需要它进行字面匹配。你能试试<代码> QueryParser < /代码>吗?同样,你应该考虑添加一个如果你的问题没有得到足够的关注。谢谢你来到这里。我用的是标准分析仪。标准Analyzer是否会显示文本值?此外,正如您所看到的,我的值是文本值和数值的组合。QueryMaker是一种在搜索值后返回权重的方法。另外,我的问题是过滤器,而不是搜索器。工作起来很神奇。哇!非常感谢你。真是松了一口气。多好的回答啊。再次非常感谢。很长一段时间以来,我一直在为它疯狂。如果我想准确地存储我的代币,我应该使用什么分析仪?建议这样做吗?如果在创建字段时将Field.Index构造函数参数设置为Field.Index.NOT_analysis,它将按原样编制索引。还有KeywordAnalyzer()也有相同的行为。如果你使用NOT_analysis,理论上会更快,尤其是在索引方面,但可能还不足以注意到它的神奇功能。哇!非常感谢你。真是松了一口气。多好的回答啊。再次非常感谢。很长一段时间以来,我一直在为它疯狂。如果我想准确地存储我的代币,我应该使用什么分析仪?建议这样做吗?如果在创建字段时将Field.Index构造函数参数设置为Field.Index.NOT_analysis,它将按原样编制索引。还有KeywordAnalyzer()也有相同的行为。如果使用NOT_analysis,理论上会更快,尤其是在索引方面,但可能还不足以注意到它