Я использую lucene 3.5 с SpanishAnalyzer (он сам использует SpanishStemmer и StandardTokenizer).
Когда SpanishAnalyzer индексирует документ со словами (например) «claramente» и «claro», они будут индексироваться как «ясность».
Это поведение понято и полезно для моих нужд, сегодня перед запросом я использую tokenStream
+, чтобы получить токен моего поискового запроса и выполнить поиск, связанный с индексированным документом. Я не использую QueryParser, но строю объекты запроса lucene в коде.
однако я хочу возможность поиска точного слова (в этом примере кларо), не теряя морфологических возможностей испанского Анализера.
Я могу пропустить шаг выше (tokenStream) и искать «claro» напрямую, но он не будет найден, поскольку он индексируется как «ясность».
Также я не хочу индексировать поле дважды с помощью двух разных анализаторов, поскольку мне нужно иметь возможность использовать PhraseQuery
или SpanNearQuery
, содержащие одно точное слово и один регулярный термин (морфологический).
Итак ... и я догадываюсь ... Я решил изменить токенизер или стриммер или фильтр (?), Так что при индексировании времени он будет индексировать 2 токена для каждого слова, исходное и оригинальное, в этом случае «claro» и «clar», а затем при запросе я могу выбрать, использовать ли точное слово или токен.
Мне нужна помощь, чтобы понять, как (и где) я могу это сделать, я думаю, что редактирование должно быть сделано где-то в Стэммер.Lucene. индексируйте несколько токенов для каждого слова в тексте
, кстати, я сделать то же самое с древнееврейского Analyzer, который возвращает несколько маркеров для каждого слова в тексте при использовании incrementToken()
(но я не исходный код)
Thanks, Это было очень полезно! Я не совсем понял ваше последнее предложение ... а также мой 'SpanishAnalyzer' использует' SpanishStemmer', а не 'SpanishLightStemFilter' (предположим, что они похожи), но я сделал соответствующие строки кода из' ReversedWildcardFilter' и добавил их к моему 'SnowballFilter.incrementToken()', и я теперь получаю 2 токена за каждое слово (исходное и оригинальное) –