Lucene.Net Underscores导致令牌分裂

时间:2010-12-01 15:08:59

标签: tsql lucene

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

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

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

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

1 个答案:

答案 0 :(得分:4)

是的,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; 
    }
}