Solr Tokenizer Вопрос - PullRequest
       10

Solr Tokenizer Вопрос

2 голосов
/ 16 сентября 2011

У меня есть то, что я считаю простым упражнением соло, но я не уверен, что использовать.

У меня есть поле имен, например Джо Смит, Джек Дэниелс и Стив. У каждого из них может быть одно имя или два имени. Я хочу, чтобы иметь возможность искать этот s.t. если вы ищете «Danie», вы получите все, что имеет имя или фамилию, начинающуюся с «Danie». Три примера возврата: «Даниэль», «Стивен Дэниелс» и «Даниер Даниэльсон».

Мне бы тоже хотелось, чтобы предпочтение отдавалось имени.

Итак, два вопроса: мне нужно использовать copyField и разбить имена на имена и фамилии? А как будет выглядеть мой анализатор?

Редактировать: два изменения в поисковой способности. 1. Что-то вроде "Joe S" должно возвращать всех пользователей, которые выглядят как "Joe S *" 2. Если пользователь выполняет поиск с символом «&», он должен быть включен в поиск и не использоваться в качестве оператора.

1 Ответ

4 голосов
/ 16 сентября 2011

Для решения вашей первой части я предлагаю следующее решение:

дважды проиндексируйте ваши поля:

  • один раз с solr.KeywordTokenizerFactory - это будет индексировать все поле как есть. Он не будет разбит на токены. Это будет полезно для повышения результатов с предпочтением имени.
  • один раз с WordDelimiterTokenizerFactory или StandardTokenizerFactory

Вы можете найти больше об этих токенизаторах здесь: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

После того, как вы проиндексировали их в двух фильтрах с разными токенизаторами, вы просто используете запрос на повышение, чтобы повысить ваши результаты из одного поля (поля с предпочтением, присвоенным имени), как описано здесь: http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_make_.22superman.22_in_the_title_field_score_higher_than_in_the_subject_field


Если пользователь выполняет поиск с символом «&», он должен быть включен в поиск и не использоваться в качестве оператора.

Для этой части вы либо используете DisMax-запрос http://wiki.apache.org/solr/DisMaxQParserPlugin, либо когда вы делаете запрос, используйте "& amp;" вместо & Также вам нужно использовать токенайзер, такой как WhiteSpaceDelimiter, чтобы просто хранить другие символы в токенах.

...