2013-03-13 3 views
1

in solr Мне нужно получить значения uniqque в поле «имя» моей базы данных.Как заставить Solr не различать «John» и «JOHN»

по этой причине я прочитал о группировке и я получаю желаемый результат

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":16, 
    "params":{ 
     "indent":"true", 
     "q":"name:И*", 
     "group.field":"name", 
     "group":"true", 
     "wt":"json"}}, 
    "grouped":{ 
    "name":{ 
     "matches":2231, 
     "groups":[{ 
      "groupValue":"ИВАН", 
      "doclist":{"numFound":1144,"start":0,"docs":[ 
       { 
       "obshtina":"ПЛОВДИВ", 
       "phone":"032/670309", 
       "timestamp":"2013-03-04T08:43:53.553Z"}] 
      }}, 
     { 
      "groupValue":"ИЛИЯ", 
      "doclist":{"numFound":177,"start":0,"docs":[ 
       { 
       "obshtina":"БРЕЗОВО", 
       "phone":"(3191)2265", 
       .............................. 

Проблема заключается в том, что теперь я заметил, что, к сожалению, у меня есть 2 группы, которые на самом деле то же самое «Иван» и «ИВАН . и проблема в том, что мое поле «name» должно быть типа string, поэтому я могу использовать подстановочный знак, который мне нужен, поэтому я не могу сделать его текст, например, и использовать фильтр LowerCase

+0

Не могли бы вы проиндексировать два поля (используя copyfield) и сделать один регистр без учета регистра с помощью фильтра LowerCase? –

+0

Я не хотел этого делать! –

ответ

3

Вы можете использовать KeywordTokenizerFactory (что делает абсолютно нет Tokenization, точно так же как поле строки) вместе с LowerCaseFilterFactory, чтобы получить то, что вы хотите.

Вы по-прежнему сможете выполнять поиск по шаблону.

2

Добавляя к предыдущему ответу, вы можете использовать новый текстовый тип Solr, как показано ниже: В индексном времени просто сохраните значение как один токен в нижнем регистре. При поиске просто рассмотрите текст поиска как один токен в нижнем регистре. Таким образом, вы можете получить желаемый эффект.

 <fieldType name="lcase" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
     </fieldType> 
Смежные вопросы