Взагалі, будь-який аналізатор у люцені - це токенізатор + стовбур + фільтр стоп-слів.
Токенізатор розбиває ваш текст на шматки, і оскільки різні аналізатори можуть використовувати різні токенізатори, ви можете отримувати різні потоки вихідних токенів , тобто послідовності фрагментів тексту. Наприклад, KeywordAnalyzer
згаданий вами текст зовсім не розділяє текст і приймає все поле як один маркер. У той же час StandardAnalyzer
(і більшість інших аналізаторів) використовують пробіли та розділові знаки як точки розщеплення. Наприклад, для фрази "я дуже радий" вона створить список ["i", "am", "very", "happy"] (або щось подібне). Для отримання додаткової інформації про конкретні аналізатори / токенізатори див. Її Документи Java .
Стебла використовуються для отримання основи відповідного слова. Це сильно залежить від мови, що використовується. Наприклад, для попередньої фрази англійською мовою буде щось на зразок ["i", "be", "veri", "happi"], а для французької "Je suis très heureux" якийсь французький аналізатор (наприклад SnowballAnalyzer
, ініціалізований з "французькою") вироблять ["je", "être", "tre", "heur"]. Звичайно, якщо ви будете використовувати аналізатор однієї мови для виведення тексту в іншу, будуть використані правила з іншої мови, і стовбур може дати неправильні результати. Це не збій у всій системі, але результати пошуку можуть бути менш точними.
KeywordAnalyzer
не використовує жодних стовбурів, воно передає все поле немодифікованим. Отже, якщо ви збираєтесь шукати деякі слова в англійському тексті, не дуже добре використовувати цей аналізатор.
Слова стоп - це найчастіші і майже марні слова. Знову ж таки, це сильно залежить від мови. Для англійської мови ці слова є "a", "the", "I", "be", "have" тощо. Фільтри стоп-слів видаляють їх з потоку токенів, щоб знизити рівень шуму в результатах пошуку, тому нарешті наша фраза "Я "я дуже задоволений" з StandardAnalyzer
буде перетворений на список ["veri", "happi"].
І KeywordAnalyzer
знову нічого не робить. Отже, KeywordAnalyzer
використовується для таких речей, як ідентифікаційні або телефонні номери, але не для звичайного тексту.
А що стосується вашого maxClauseCount
винятку, я вважаю, що ви отримаєте це на пошуках. У цьому випадку, швидше за все, це через занадто складний пошуковий запит. Спробуйте розділити його на кілька запитів або скористайтеся функціями більш низького рівня.