2011-11-03 3 views
7

Je champ "text_general" dans schema.xmlSolr faux champs de texte de tri

<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> 

Je stockés les documents:

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)" 

"sort" et champs "testata" a un "text_general" type.

Recherche fonctionne bien pour moi:

http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'} 

Mais avec tri existe un problème:

http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'}&sort=testata desc 

Il me renvoie ce résultat:

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)" 

I don `t comprendre pourquoi mon tri fonctionne pas correctement. Il devrait me retourner le résultat comme ceci:

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" 

Répondre

20

Le tri ne fonctionne pas bien sur les champs à valeurs multiples et à jetons.
Comme testata a été défini avec le type de champ text_general, il sera tokensized et par conséquent le tri ne fonctionnerait pas bien. Documentation - Le tri peut être effectué sur le "score" du document, ou sur tout champ multiValued = "false" indexed = "true", à condition que ce champ soit non-tokenized (c'est-à-dire: n'a pas d'analyseur) ou utilise un analyseur qui produit un seul terme (ex: utilise le KeywordTokenizer)

http://wiki.apache.org/solr/CommonQueryParameters#sort

Utiliser la chaîne comme le type de champ et copiez le champ titre dans le nouveau champ.

+0

+1. C'est ce que j'ai fini par faire pour activer le "tri" sur les champs à valeurs multiples: la première valeur de chacun a-t-elle été dupliquée dans un champ de chaîne correspondant, et le tri a-t-il été effectué? –

+0

Merci! J'utilisais un type de champ "correspondance partielle" et je n'arrivais pas à comprendre pourquoi mes résultats retournaient complètement non triés. Passer à un champ de texte régulier a corrigé cela :) – masterchief