SynonymAnalyzer
编写您自己的自定义分析器类,类似于Lucene.Net – Custom Synonym Analyzer。您的覆盖可以通过使用和TokenStream
流水线化流来解决这个问题。WhitespaceTokenizer
LowerCaseFilter
请记住,您的索引器和搜索器需要使用相同的分析器。
更新:处理多个逗号分隔的关键字
如果您只需要处理不带空格的逗号分隔关键字进行搜索,而不是索引,那么您可以将搜索表达式转换expr
如下。
expr = expr.Replace(',', ' ');
然后传递expr
给QueryParser
. 如果您想支持其他分隔符,例如 ';' 你可以这样做:
var terms = expr.Split(new char[] { ',', ';'} );
expr = String.Join(" ", terms);
但是您还需要检查不应转换的短语表达式,例如“sybase,c#,.net,oracle”(表达式包括引号“字符)(用户正在寻找完全匹配):
expr = expr.Trim();
if (!(expr.StartsWith("\"") && expr.EndsWith("\"")))
{
expr = expr.Replace(',', ' ');
}
该表达式可能同时包含一个短语和一些关键字,如下所示:
"sybase,c#,.net,oracle" server,c#,.net,sybase
然后您需要解析搜索表达式并将其翻译为:
"sybase,c#,.net,oracle" server c# .net sybase
如果您还需要处理不带空格的逗号分隔关键字以进行索引,那么您需要解析不带空格的逗号分隔关键字的文本并将它们存储在不同的字段中,例如。Keywords
(必须与您的自定义分析器相关联)。然后您的搜索处理程序需要像这样转换搜索表达式:
server,c#,.net,sybase
对此:
Keywords:server Keywords:c# Keywords:.net, Keywords:sybase
或更简单地说:
Keywords:(server, c#, .net, sybase)