我正在使用 lucene.net (2.3.2 ) 和兼容的 WordDelimiterFilter 的移植版本,但是当我使用带有连字符的单词执行通配符搜索时,它们不起作用。
一个例子是单词"CL-276-0001",当我搜索"cl" / "cl-276" / "cl-276-0001" 时,我发现记录没有问题(这是我最初试图解决的问题),但现在当我搜索"cl-276*"或"cl-276-0*"时,它不再起作用。“cl*”不受影响,这让我相信它可能正在使用查询解析器做一些事情,而不是将通配符添加回被调用的任何内容。
任何帮助解决/理解这一点将不胜感激。
编辑:我查看了查询解析器生成的查询。这正是输入的内容,我猜这意味着搜索不起作用,因为它会查找用户输入的内容作为前缀。现在我想我不应该改变这种行为。
第二次编辑:有人问分析仪是什么样的:
public override TokenStream TokenStream(string fieldName, TextReader reader)
{
TokenStream result = new WhitespaceTokenizer(reader);
result = new WordDelimiterFilter(result,1, 1, 1 , 1, 1 );
result = new StandardFilter(result);
result = new LowerCaseFilter(result);
result = new StopFilter(result, LoadStopWords());
return result;
}