2010-02-08 24 views
6

Estoy haciendo algunas búsquedas facetadas, pero tengo algunos problemas. No obtengo los resultados deseados cuando hay varias palabras en el campo de búsqueda con facetas.Problema con la búsqueda facetada

Ejemplo: campo de “animal”, con las siguientes entradas:

 A horse 

     Black horse 

     Black horse 

La búsqueda por facetas envía de nuevo "caballo (3)" como mejor resultado, mientras que me gustaría volver "caballo Negro (2) ".

Y este es el schema.xml. El campo de búsqueda es BUSQUEDA, y el campo facetado es SUPERFICIE. Creo que he probado la mayoría de las posibles combinaciones de los tipos definidos para estos dos campos, pero todavía no funciona.

<?xml version="1.0" encoding="UTF-8" ?> 
     <schema name="example" version="1.2"> 
     <types> 

    <fieldType name="string" class="solr.StrField"/> 

    <fieldType name="facet_texPersonal" class="solr.StrField" sortMissingLast="true" omitNorms="true"> 
      <analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="facet_tex" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
      <analyzer> 
      <tokenizer class="solr.KeywordTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.TrimFilterFactory" /> 
      </analyzer> 
      </fieldType> 

      <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" 
      enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </analyzer> 
      <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" 
      enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textTight" class="solr.TextField" positionIncrementGap="100" > 
      <analyzer> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0"  catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
      </analyzer> 
      </fieldType> 

      <fieldType name="textMultidioma" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" 
       enablePositionIncrements="true" /> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
       catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
      catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      </fieldType> 

     </types> 

     <fields> 
      <field name="BUSQUEDA" type="facet_tex" indexed="true" stored="true"/> 
      <field name="SUPERFICIE" type="facet_tex" indexed="true" stored="true"/> 
      <field name="NOMBRE" type="string" indexed="true" stored="true"/> 
     </fields> 
     <uniqueKey>NOMBRE</uniqueKey> 
     <defaultSearchField>BUSQUEDA</defaultSearchField></schema> 

¿Alguna sugerencia?

¡Muchas gracias por adelantado!

+0

¿reconstruyó su índice después de cada cambio de tipo de campo? –

+0

He intentado hacerlo, pero no sucedió nada nuevo. Creo que tengo algún error que no puedo notar. – Carlos

Respuesta

3

Tiene que hacer facetas en un campo no tokenizado (campo clase solr.StrField, o utilizando solr.KeywordTokenizerFactory). This thread lo explica en detalle.

+0

He estado tratando de hacerlo, pero parece que no funciona. Todavía estoy obteniendo los mismos resultados. De todos modos, gracias por tu ayuda – Carlos

+0

@Carlos: ¿qué has intentado? publicar su schema.xml –

+0

He tratado con BUSQUEDA ser "facet_texPersonal" y lo que consigo es: Un (1) Negro (2) Es como si sólo se considera la primera palabra – Carlos

3

Teníamos campos con múltiples facetas para un proyecto en el que trabajé anteriormente. Aquí es (parte de) la schema.xml relación con esto:

<schema name="example" version="1.2"> 
<types> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
    ... 
</types> 
<fields> 
    <field name="grant_type" type="string" indexed="true" stored="true" /> 
    ... 
</fields> 
</schema> 

Como Mauricio ha puesto de relieve la faceta campo ha de ser no-tokens (divididos en palabras separadas). En la configuración anterior, estamos utilizando el tipo de campo 'solr.StrField' (no tokenizado).

Se pueden encontrar más sugerencias para los tipos de campos facetados (no convertir a minúsculas, no eliminar los signos de puntuación, etc.) en the Solr Faceting Overview page.

Cuestiones relacionadas