我在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并找到别的东西。
答案 0 :(得分:3)
StandardAnalyzer
会小写TokenStream
中的所有字符。
试试这个:
Filter LE = new QueryWrapperFilter(new TermQuery(new Term(field, "ZZZOCB9X9Y".ToLowerInvariant())));