Хранение слов с апострофом в индексе Lucene

Это очень напоминает список экземпляров модели Django ORM.

, Почему не сортируют их на запросе как это:

ut = Tag.objects.order_by('-count')
5
задан Jimmy 27 July 2009 в 21:22
поделиться

2 ответа

Основываясь на ваших пояснениях, я хочу разделить ваш вопрос на два и ответить на каждый по очереди:

  1. Как мне индексировать слова с апострофами как эквиваленты аналогичных слов без апострофа? например, сопоставление Moodys и Moody's одного и того же индексного термина.
  2. Как мне реализовать автозаполнение поиска в Lucene, т.е. найти документы по индексу, используя префиксы слов, например карту Му на Moodys ?

1 относительно просто - используйте StandardToeknizer , чтобы создать токен, объединяющий апостроф и s с предыдущим словом, затем StandardFilter , чтобы удалить апостроф и s. Это преобразует Moody's в Moody. StandardAnalyzer делает это и многое другое (строчные буквы и удаление стоп-слов), что может быть больше, чем вам нужно. Использование стеммера должно привести как Moodys , так и Moody к одному и тому же токену. Попробуйте для этого SnowBallFilter .

2 сложнее: PrefixQuery Lucene, на который ссылался Алан, будет работать только тогда, когда название компании является первым словом в поле. Вам нужно что-то вроде ответа на этот вопрос об автозаполнении в Lucene .

9
ответ дан 13 December 2019 в 22:13
поделиться

StandardAnalyser должен работать для 3 и 4, но не будет работать для 1 и 2.

Без написания собственного (сложного) текстового анализатора я бы подумал о том, как вы ожидаете, что будут искать названия компаний. Например, основной синтаксис поиска lucene означает, что вы можете найти "Moody's", если будете искать с использованием подстановочных знаков: "Moo *" и "Mood *". Следовательно, вы можете захотеть добавить «*» к поисковому запросу перед отправкой в ​​lucene, однако это может вызвать некоторую путаницу, если пользователь не знает об этом добавлении подстановочного знака под капотом.

1
ответ дан 13 December 2019 в 22:13
поделиться