Lucene.Net подчеркивает причину раскола токена - PullRequest
5 голосов
/ 01 декабря 2010

Я записал в таблицу базы данных, представления и хранимые процедуры базы данных MsSqlServer в структуру каталогов, которую я затем индексирую с помощью Lucene.net.Большинство имен таблиц, представлений и процедур содержат подчеркивания.

Я использую StandardAnalyzer.Например, если я запрашиваю таблицу с именем tIr_ InvoiceBtnWtn01, я получаю хиты назад для tIr и InvoiceBtnWtn01, а не просто для tIr _InvoiceBtnWtn01.

Я думаю, что проблема заключается в том, чторазделение на _ (подчеркивание), так как это пунктуация.

Есть ли (простой) способ удалить подчеркивания из списка знаков препинания или есть другой анализатор, который я должен использовать для SQL и языков программирования?

1 Ответ

4 голосов
/ 01 декабря 2010

Да, 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; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...