为什么过滤器不能在Lucene.Net中使用文本/字符串值?

时间:2013-06-03 22:11:13

标签: c# lucene lucene.net

我在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并找到别的东西。

1 个答案:

答案 0 :(得分:3)

StandardAnalyzer会小写TokenStream中的所有字符。

试试这个:

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