Поиск слов в дефисе с помощью Lucene - PullRequest
6 голосов
/ 01 сентября 2010

Я хочу, чтобы lucene искала слова, написанные через дефис, например: энергосберегающий или «энергосберегающий» как одно слово

Так что, если вход энергоэффективен, токенизатор генерирует такие термины, как энергоэффективный или энергоэффективный или энергоэффективный

Поэтому lucene возвращается со страницами, содержащими как «энергоэффективные», так и «энергоэффективные», но я хочу, чтобы он возвращался исключительно со страницами для энергоэффективных

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

Ответы [ 2 ]

8 голосов
/ 01 сентября 2010

Используйте WhitespaceAnalyzer вместо standardAnalyzer.
Это будет генерировать токены, разделяющиеся только на пробелы.Но проверьте, есть ли другие вещи, которые будут изменены.

0 голосов
/ 11 октября 2018

Вот мой полный блог на Lucene and Hyphen

Если вы хотите поддержать HYPHEN в StandardAnalyzer, вам нужно внести изменения в StandardTokenizerImpl, который отвечает залексический анализ.

StandardTokenizer разбивает дефисированные слова на два, например, «энергосберегающий» маркируется как энергоэффективный.

Поскольку StandardTokenizerImpl.java генерируется классом из jFlex и его входной файл StandardTokenizerImpl.jflex, вам нужно добавить следующую строку в SUPPLEMENTARY.jflex-macro, которая включается в StandardTokenizerImpl.jflex

            MidLetterSupp = ( [\u002D]  ) 

После этого сгенерируйте StandardTokenizerImpl.java, используя jflex иперестройте индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...