2009-12-29 12 views
8

Tengo un problema con Solr y Faceting y me pregunto si alguien sabe de la solución. Tengo un trabajo para solucionarlo en el minuto, sin embargo, realmente quiero averiguar por qué mi consulta no está funcionando.Faceteado con Solr usando campos de "cadena", campos de "texto" y campos de "copia"

Aquí está mi esquema simplificado para que sea más fácil de seguir:

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

Como se puede ver que tengo un caso insensible campo llamado RecordType y se copia a un caso frecordtype campo sensible que no tokenize la texto. Esto se debe a que solr devuelve el valor indexado en lugar del valor almacenado en los resultados de facetado.

cuando intento la siguiente consulta:

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 

no consigo ningún resultado, sin embargo, el facteting muestra todavía hay 1 registro.

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

Sin embargo si cambio la consulta fitler (línea 7 sólo) para estar en el "RecordType" insted de 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 

recibo el 1 resultado de nuevo que yo quiero.

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

Así que mi pregunta es, ¿hay algo que tengo que hacer con el fin de obtener la primera versión de la consulta para devolver los resultados que quiero? Tal vez sea algo relacionado con la codificación de URL o algo así. Cualquier sugerencia de algún gurú de Solr o de lo contrario sería muy agradecido.

NOTA: Esto no es necesario, ya que la facetación está funcionando. Es más una pregunta de consulta porque no puedo realizar una consulta en un campo de "cadena", aunque la caja y el espaciado son exactamente los mismos que en la versión indexada.

EDIT: Para obtener más información acerca de tallar se puede comprobar a cabo estas de Entrada de blog en él:

Gracias

de Dave

+0

Arrhhh Ordena esto ... Necesitas cotizaciones para valores con espacios :) – CraftyFella

Respuesta

10

Es necesario citas alrededor de los valores

E.g.

frecordtype: "Grande Record"

obras

frecordtype: Registro grande

Este buscará grande en el frecordtype, que traerá de vuelta nada .. entonces Record a través del campo por defecto en Solr.

Cuestiones relacionadas