2010-09-02 14 views
6

Recientemente instalé solr. El índice de ejemplo (encontrado en apache-solr - #. #. # \ Example \ solr) parece funcionar, y, una vez copiado en el directorio de inicio de mi servidor, puedo acceder a él a través de las páginas de administración. Sin embargo cuando intento poner en práctica un nuevo índice reemplazando el contenido schema.xml con (tomado de here):Solr: QueryElevationComponent requiere StrField uniqueKeyField error

<?xml version="1.0" encoding="UTF-8" ?> 
    <schema name="example" version="1.2"> 
    <types> 
     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> 
     <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> 
     <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0" /> 
     <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> 
     </types> 
    <fields> 
     <field name="fileid" type="int" indexed="true" stored="true" required="true" /> 
     <field name="doctext" type="text" indexed="true" stored="false" required="false" /> 
     <field name="title" type="text" indexed="true" stored="false" required="false" /> 
     <field name="datecreated" type="date" indexed="true" stored="false" /> 
    </fields> 
    <uniqueKey>fileid</uniqueKey> 
    <defaultSearchField>doctext</defaultSearchField> 
    <solrQueryParser defaultOperator="OR" /> 
    </schema> 

estoy recibiendo un error de configuración, lo que parece sugerir que el uniqueKeyField debe implementarse con un strField tipo (algo que me resulta difícil de creer que es realmente el caso?)):.

"estado HTTP 500 - errores graves en la configuración Solr ... org.apache.solr.common.SolrException: QueryElevationComponent requiere el esquema de tener un uniqueKeyField implementado usando StrField en org.apache.solr.handler.component.QueryElevationComponent.inform (QueryElevationComponent.java:157) en org.apache. solr.core.SolrResourceLoader.inform (SolrResourceLoader.java:508) a las ..."

Mi googlear ha aparecido muy poco para ayudar, así que espero que podría haber alguien por aquí que podría haber llegado a través de este problema y/o tiene algunas ideas de cómo resolverlo?

Gracias de antemano por cualquier consejo, Bea.

Respuesta

11

Sí, por el momento QueryElevationComponent requiere una clave única de cadena. Esta limitación es documented in the Solr wiki.

Here's the issue en el proyecto JIRA.

+1

¡Problema resuelto! Gracias por confirmar que Mauricio, y por los enlaces. Como no necesitaré QueryElevationComponent, lo he eliminado y su controlador de mi archivo solrconfig.xml para evitar el problema. – bea

-2

Si todavía está buscando una respuesta,

En schema.xml, incluyen los siguientes

<fieldType name="uuid" class="solr.UUIDField" indexed="true" /> 
<field name="id" type="uuid" indexed="true" stored="true" default="NEW" /> 

En elevate.xml, utiliza este ID para asignar el término de búsqueda para el mejor resultado apuesta .

<elevate> 
<query text="foo bar"> 
    <doc id="4602376f-9741-407b-896e-645ec3ead457" /> 
</query> 
</elevate> 

Aquí, 4602376f-9741-407b-896e-645ec3ead457 es el valor en el campo "id" de la mejor documento apuesta. Desear, Solr nos permite especificar cualquier campo de clave principal, digamos employeeid o productid para especificar en el elevate.xml

Cuestiones relacionadas