Solr неправильные текстовые поля
У меня есть поле "text_general" в schema.xml
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/><filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
У меня есть документы:
document1:
spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
testata = "Mattino di Padova (Il)"
document2:
spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
testata = "Italia Oggi"
document3
spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
testata = "Nuova Ferrara (La)"
"spell" и "testata" имеют тип "text_general".
Поиск работает отлично для меня:
http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'}
Но при сортировке существует некоторая проблема:
http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'}&sort=testata desc
Он возвращает мне этот результат:
document1:
spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
testata = "Mattino di Padova (Il)"
document2:
spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
testata = "Italia Oggi"
document3
spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
testata = "Nuova Ferrara (La)"
Я не понимаю, почему моя сортировка работает неправильно. Он должен вернуть мне результат следующим образом:
document3
spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
testata = "Nuova Ferrara (La)"
document1:
spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
testata = "Mattino di Padova (Il)"
document2:
spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
testata = "Italia Oggi"
Ответы
Ответ 1
Сортировка не работает хорошо на многозначных и токенизированных полях.
Так как testata
определены с text_general
поля text_general
, они будут размечены, и, следовательно, сортировка не будет работать нормально.
Сортировка может быть выполнена по "счету" документа или по любому multiValued="false" indexed="true"
при условии, что это поле не имеет токена (то есть: не имеет Analyzer) или использует Analyzer, который создает только один термин (т.е. использует KeywordTokenizer)
Источник: http://wiki.apache.org/solr/CommonQueryParameters#sort
Используйте string
в качестве типа поля и скопируйте поле title
в новое поле.
<field name="testata_sort" type="string" indexed="true" stored="false"/>
<copyField source="testata" dest="testata_sort" />