Lucene.Net Underscores导致令牌分裂

aut*_*tic 5 t-sql lucene

我已经将MsSqlServer数据库表,视图和存储过程编写到一个目录结构中,然后我用Lucene.net编制索引.我的大多数表,视图和过程名称都包含下划线.

我使用StandardAnalyzer.例如,如果我查询名为tIr_ InvoiceBtnWtn01的表,我会收到针对tIr和InvoiceBtnWtn01的命中,而不仅仅是针对 _InvoiceBtnWtn01.

我认为问题是标记器正在分裂_(下划线),因为它是标点符号.

是否有(简单)方法从标点符号列表中删除下划线或是否有另一个我应该用于sql和编程语言的分析器?

Xod*_*rap 6

是的,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)