Сравнение Lucene Analyzers - PullRequest
       22

Сравнение Lucene Analyzers

104 голосов
/ 30 марта 2011

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

Ответы [ 2 ]

206 голосов
/ 30 марта 2011

В общем, любой анализатор в Lucene - это токенизатор + стеммер + фильтр стоп-слов.

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

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

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

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

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

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

0 голосов
/ 20 сентября 2018

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

...