Запрос веб-интерфейса Solr с дефисом

У меня есть схема, созданная Haystack для индексации книг и авторов в Solr 4.3. При выполнении поиска все работает нормально, за исключением условий поиска, включая дефис.

Я знаю, что вы должны избегать их, используя обратную косую черту, но даже с веб-интерфейсом solr я не могу найти правильные документы.

Как показано на снимках экрана ниже, есть автор по имени Укиё-Э, которого можно найти с помощью full_name:(ukiyo). При вводе полное_имя:(укиё-э) или полное_имя:(укиё-э) я ничего не могу найти.

поиск укиё дает одно совпадение укиё-Э

РЕДАКТИРОВАТЬ

Информация о схеме:

<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
  </analyzer>
</fieldType>
...
<field name="full_name" type="edge_ngram" indexed="true" stored="true" multiValued="false" />

Результаты анализатора: введите здесь описание изображения


person Yoeri    schedule 01.09.2013    source источник


Ответы (1)


Проанализируйте свой термин, используя меню «Анализ» отдельно для индексации и запроса. В частности, у вас должны быть аналогичные процедуры обработки текста во время индексирования и выполнения запросов (см. поле full_name в схеме). Если вы не разделите свой запрос «укиё-э» на 2 термина ukiyo и e, а разметите его во время индексации, вы не сможете найти полный термин ukiyo-e.

person Artem Lukanin    schedule 02.09.2013
comment
Привет, спасибо за ответ, но ... мне не хватает знаний, когда дело доходит до solr ... я редактирую свой пост с результатами анализатора и определением схемы поля. - person Yoeri; 02.09.2013
comment
В EdgeNGramFilterFactory вы устанавливаете minGramSize="2", после токенизации укиё-э с помощью WordDelimiterFilterFactory у вас есть 2 токена укиё и е. Второй токен состоит только из 1 символа, но вам необходимо, чтобы токены состояли как минимум из 2 символов. - person Artem Lukanin; 03.09.2013
comment
Я полагаю, у вас есть <solrQueryParser defaultOperator="AND" /> в вашей схеме, для которой требуются все термины запроса, присутствующие в индексе. Поскольку в вашем указателе нет термина e, вы не можете найти этот документ, в котором есть термины uk, uki, ukiy и ukiyo в соответствии с вашей схемой. - person Artem Lukanin; 03.09.2013
comment
Привет, большое спасибо за ответ, я понизил MinGram до 1 и оператор до OR, и теперь появляются условия. Думая о настройке локального экземпляра solr для игры с настройками и анализа результатов, я считаю, что MinGramSize, равный 1, создает гораздо больший индекс... - person Yoeri; 03.09.2013
comment
Вы можете удалить сплиттер <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> из анализа и установить обратно minGramSize="2". Это зависит от того, как вы хотите обрабатывать односимвольные слова. - person Artem Lukanin; 04.09.2013
comment
Не думайте, что у нас есть односимвольные слова... я удалю это :-) Спасибо! - person Yoeri; 04.09.2013