Сравнение анализаторов Люцена


может ли кто-нибудь объяснить разницу между различными анализаторами в Lucene? Я получаю исключение maxClauseCount, и я понимаю, что могу избежать этого, используя KeywordAnalyzer, но я не хочу меняться от стандартного анализатора, не понимая проблем, связанных с анализаторами. Большое спасибо.

2 101

2 ответа:

в общем, любой анализатор в Lucene является tokenizer + stemmer + stop-words filter.

токенизатор разбивает текст на куски, и так как разные анализаторы могут использовать разные токенизаторы, вы можете получить разные выходные данные маркер потоков, т. е. последовательности фрагментов текста. Например, KeywordAnalyzer вы упомянули не разбивает текст на всех и принимает все поле в качестве одного маркера. В то же время, StandardAnalyzer (и большинство других анализаторы) используют пробелы и знаки препинания в качестве точек разделения. Например, для фразы "Я очень счастлив"он будет производить список ["я"," есть"," очень"," счастлив"] (или что-то в этом роде). Для получения дополнительной информации о конкретных анализаторов/tokenizers увидеть его Java Docs.

модули используются для получения базы слова в вопросе. Это сильно зависит от используемого языка. Например, для предыдущей фразы на английском языке будет что-то вроде ["i", "be", " veri", "happi"] производится, а для французского "Je suis très heureux" какой-то французский анализатор (например SnowballAnalyzer инициализируется с "французским") будет производить ["Йе", "быть", "Тре", "программы"]. Конечно, если вы будете использовать анализатор одного языка для вывода текста на другом, будут использоваться правила из другого языка, и stemmer может привести к неправильным результатам. Это не сбой всей системы, но результаты поиска могут быть менее точными.

KeywordAnalyzer не использует никаких стеммеров, он проходит все поля без изменений. Так что, если вы собираетесь искать некоторые слова в английском тексте, это не очень хорошая идея, чтобы использовать этот анализатор.

стоп-слов самые частые и почти бесполезные слова. Опять же, это сильно зависит от языка. Для английского языка это слова "a", "the", "I", "be", "have" и др. Фильтры стоп-слов удаляют их из потока токенов, чтобы снизить шум в результатах поиска, поэтому, наконец, наша фраза" Я очень доволен " с StandardAnalyzer будет преобразован в список ["veri", "happi"].

и KeywordAnalyzer снова ничего не делает. Итак,KeywordAnalyzer используется для таких вещей, как ID или номера телефонов, но не для обычного текста.

а что касается вашего maxClauseCount исключение, я считаю, что вы получите его на поиск. В данном случае скорее всего это из-за слишком сложного поискового запроса. Попробуйте разбить его на несколько запросов или использовать более низкоуровневые функции.

С моей точки зрения, я использовал StandAnalyzer и SmartCNAnalyzer. Как я должен искать текст на китайском языке. Очевидно,SmartCnAnalyzer лучше справляется с китайцами. Для различных целей, вы должны выбрать правильный анализатор.