标准分析仪不工作。据我所知,它将此更改为搜索 c
和 net
WhitespaceAnalyzer
可以工作,但区分大小写。
一般规则是搜索应该像 Google 一样工作,所以希望它是一个考虑到 .net
的配置问题,c#
已经存在了一段时间,或者有一个解决方法.
根据下面的建议,我尝试了自定义 WhitespaceAnalyzer
但是如果关键字用逗号分隔并且没有正确处理无空格,例如
java,.net,c#,oracle
在搜索时不会返回错误。
我遇到了用于拆分 token 的 PatternAnalyzer
,但不知道如何在这种情况下使用它。
我正在使用 Lucene.Net 3.0.3
和 .NET 4.0
最佳答案
编写您自己的自定义分析器类,类似于 Lucene.Net – Custom Synonym Analyzer 中的 SynonymAnalyzer
.您对 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
如果您还需要为索引 处理非空格逗号分隔的关键字,那么您需要解析非空格逗号分隔关键字的文本并将它们存储在不同的字段中,例如。 关键字
(必须与您的自定义分析器相关联)。然后您的搜索处理程序需要像这样转换搜索表达式:
server,c#,.net,sybase
为此:
Keywords:server Keywords:c# Keywords:.net, Keywords:sybase
或者更简单地说:
Keywords:(server, c#, .net, sybase)
关于c# - 如何自定义 Lucene.NET 以搜索不区分大小写的带符号的单词(例如 "C#"或 ".net")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016473/