Lucene нечувствительный анализатор пробелов? - PullRequest
1 голос
/ 19 января 2011

Я использую lucene для поиска, а с тегами - анализатор пробелов. Похоже, что он хранится правильно. С помощью стандартного анализатора мой поиск в C # даст результаты для C, C ++. Каждый анализатор, который я пробовал (я не пробовал все), делает это, за исключением анализатора пробелов. Это хорошо, за исключением того, что если я ищу c #, я не получаю результатов (я использую строчные буквы C вместо прописных). Это раздражает, если я ищу заголовок, такой как "Lucene нечувствительный анализатор пробелов?" когда это будет «Lucene Insensitive Whitespace анализатор?». (Обратите внимание, что первые 3 слова начинаются с верхнего, а последнее не по сравнению с моим поиском с одним верхним и всем нижним).

Как мне сделать нечувствительный анализатор пробелов? Примечание. Анализатор пробелов запечатан.

Ответы [ 3 ]

6 голосов
/ 19 января 2011
3 голосов
/ 01 марта 2016

Вы можете создать собственный анализатор, как показано ниже (для Lucene версии 4.10.4 в качестве примера)

import java.io.Reader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.LowerCaseFilter;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;

public class CaseInsensitiveWhitespaceAnalyzer extends Analyzer {
    @Override
    protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
            Tokenizer tokenizer = new WhitespaceTokenizer(arg1);
            TokenStream filter = new LowerCaseFilter(tokenizer);
            return new TokenStreamComponents(tokenizer, filter);
    }
}

И вы можете использовать анализатор для настройки программы записи индекса при индексации, а также использовать ее для создания анализатора запросов при поиске.

1 голос
/ 18 сентября 2018
class CaseInsensitiveWhitespaceAnalyzer : Analyzer
{
    public override TokenStream TokenStream(string fieldName, TextReader reader)
    {
        var tokenizer = new WhitespaceTokenizer(reader);
        var lowercaseFilter = new LowerCaseFilter(tokenizer);

        return new StopFilter(true, lowercaseFilter, StopAnalyzer.ENGLISH_STOP_WORDS_SET, true);
    }
}

Вот версия C #, которая хорошо подходит для моего варианта использования.

...