2009-12-29 8 views
8

Ho un problema con Solr e Faceting e mi chiedo se qualcuno conosce la correzione. Ho una soluzione per questo al minuto, tuttavia voglio davvero capire perché la mia query non funziona.Faceting con Solr utilizzando campi "stringa", campi "testo" e campi "copia"

Ecco il mio schema, semplificata per rendere più facile seguire:

<fields> 
    <field name="uniqueid" type="string" indexed="true" required="true"/> 
    <!-- Indexed and Stored Field ---> 
    <field name="recordtype" type="text" indexed="true" stored="true"/> 
    <!-- Facet Version of fields --> 
    <field name="frecordtype" type="string" indexed="true" stored="false"/> 
</fields> 

<!-- Copy fields for facet searches --> 
<copyField source="recordtype" dest="frecordtype"/> 

Come potete vedere ho un case insensitive campo chiamato recordtype e sta copiati in un campo sensibile frecordtype caso che non tokenize il testo. Questo perché solr restituisce il valore indicizzato piuttosto che il valore memorizzato nei risultati di sfaccettatura.

quando provo la seguente query:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7dfrecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

non ottengo alcun risultato, ma il facteting mostra ancora c'è 1 record.

<result name="response" numFound="0" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Tuttavia se cambio la query fitler (linea 7 solo) di essere sulla "recordtype" invece di frecordtype:

http://localhost:8080 
/solr 
/select 
?version=2.2 
&facet.field=%7b!ex%3dfrecordtype%7dfrecordtype 
&facet=on 
&fq=%7b!tag%3dfrecordtype%7drecordtype%3aLarge%20Record 
&f1=*%2cscore 
&rows=20 
&start=0 
&qt=standard 
&q=text%3a%25 

ottengo il 1 risultato di nuovo che voglio.

<result name="response" numFound="1" start="0" /> 
<lst name="facet_counts"> 
    <lst name="facet_queries" /> 
<lst name="facet_fields"> 
<lst name="frecordtype"> 
    <int name="Large Record">1</int> 
    <int name="Small Record">12</int> 
    <int name="Other">1</int> 
    </lst> 
    </lst> 
    <lst name="facet_dates" /> 
    </lst> 

Quindi la mia domanda è: esiste qualcosa che devo fare per ottenere la prima versione della query per restituire i risultati che voglio? Forse ha qualcosa a che fare con la codifica dell'URL o qualcosa del genere? Qualsiasi suggerimento da parte di qualche guru del Solr o altrimenti sarebbe molto grato.

NOTA: non è necessaria una domanda di sfaccettatura poiché la sfaccettatura è effettivamente funzionante. È più una domanda di interrogazione in quanto non posso eseguire una query su un campo "stringa", anche se il caso e la spaziatura sono esattamente gli stessi della versione indicizzata.

EDIT: Per ulteriori informazioni sulla sfaccettatura è possibile controllare questi di post del blog su di esso:

Grazie

Dave

+0

Arrhhh Ordinato questo ... Hai bisogno di quotazioni intorno ai valori con gli spazi :) – CraftyFella

risposta

10

È necessario quotazioni attorno ai valori

E.g.

frecordtype: "Grande Record"

funziona

frecordtype: Grande Record

Questo cercherà di grandi dimensioni nel frecordtype, che riporterà nulla .. poi Record attraverso il campo predefinito in solr.