2015-08-23 7 views

ответ

3

Это зависит от того, что вы хотите сделать.

  1. Если разница между 2 различными значениями только число после названия («user1» и «user2»), вы можете использовать LowerCaseTokenizerFactory которые капли не являющихся буквами, так что «user1», «user2» и «user4» будет проиндексирован «пользователь».

  2. Вы можете использовать EdgeNGramFilterFactory, который создает n-граммы из поля для индексации, поэтому «user4» будет проиндексирован: «u», «us», «use», «user», «user4». В этом случае вы найдете «user», «user1», «user2» и «user4», когда ваше ключевое слово: «u», «us», «use» или «user».

  3. Как упоминалось в @srs, вы можете использовать подстановочный знак.

+0

большое спасибо. Но как у вас лучшая производительность? Используя EdgeNGramFilterFactory или используя подстановочный запрос: -/ –

+0

Добро пожаловать :) Я не сравнивал их работу. EdgeNGramFilterFactory занимает больше времени при индексировании и требует больше памяти. Хотя подстановочный шаблон занимает больше времени при извлечении данных и не применяется анализатор на соответствующих условиях. Если вы решите использовать подстановочный знак, не ставьте «*» или «?» В начале ключевого слова как («* user»), если у вас большой объем данных. –

0

Если вы хотите, чтобы решить эту проблему в время запроса вы можете создать объект запроса с «шаблоном» и поиском «пользователя *», чтобы получить все результаты. Следуйте примеру:

Query q = yourQueryBuilderInstance.keyword().wildcard().onField("yourField") 
     .matching("user*").createQuery(); 
Смежные вопросы