我已经将MsSqlServer数据库表,视图和存储过程编写到一个目录结构中,然后我用Lucene.net编制索引.我的大多数表,视图和过程名称都包含下划线.
我使用StandardAnalyzer.例如,如果我查询名为tIr_ InvoiceBtnWtn01的表,我会收到针对tIr和InvoiceBtnWtn01的命中,而不仅仅是针对 _InvoiceBtnWtn01.
我认为问题是标记器正在分裂_(下划线),因为它是标点符号.
是否有(简单)方法从标点符号列表中删除下划线或是否有另一个我应该用于sql和编程语言的分析器?
是的,StandardAnalyzer 在下划线处拆分。WhitespaceAnalyzer 没有。请注意,您可以使用 PerFieldAnalyzerWrapper 为每个字段使用不同的分析器 - 您可能希望为除表/列名称之外的所有内容保留一些标准分析器的功能。
WhitespaceAnalyzer 只进行空白分割。例如,它不会小写您的令牌。因此,您可能想要制作自己的分析器,将 WhitespaceTokenizer 和 LowercaseFilter 结合起来,或查看 LowercaseTokenizer。
编辑:简单的自定义分析器(在 C# 中,但您可以很容易地将其转换为 Java):
// Chains together standard tokenizer, standard filter, and lowercase filter
class MyAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
{
StandardTokenizer baseTokenizer = new StandardTokenizer(Lucene.Net.Util.Version.LUCENE_29, reader);
StandardFilter standardFilter = new StandardFilter(baseTokenizer);
LowerCaseFilter lcFilter = new LowerCaseFilter(standardFilter);
return lcFilter;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1861 次 |
最近记录: |