2010-09-02 8 views
6

Ho installato di recente il solr. L'indice di esempio (trovato su apache-solr - #. #. # \ Esempio \ solr) sembra funzionare e, una volta copiato nella mia directory home solr, sono in grado di accedervi tramite le pagine di amministrazione. Tuttavia quando provo ad implementare un nuovo indice, sostituendo il contenuto schema.xml con (tratto da here):Solr: QueryElevationComponent richiede l'errore uniqueFieldFieldFieldField

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

sto ricevendo un errore di configurazione, che sembra suggerire che l'uniqueKeyField deve essere implementato con uno StrField tipo (cosa che trovo difficile credere che in realtà è il caso?)):.

"HTTP Stato 500 - errori gravi nella configurazione solr ... org.apache.solr.common.SolrException: QueryElevationComponent richiede lo schema di avere un oggetto UniqueKeyField implementato utilizzando StrField su org.apache.solr.handler.component.QueryElevationComponent.inform (QueryElevationComponent.java:157) su org.apache. solr.core.SolrResourceLoader.inform (SolrResourceLoader.java:508) a ..."

mio Googling si è alzato molto poco per aiutare, quindi spero ci potrebbe essere qualcuno qui in giro che potrebbe avere incontrato questo problema e/o avere qualche idea su come risolverlo?

Grazie in anticipo per qualsiasi consiglio, Bea.

risposta

11

Sì, al momento QueryElevationComponent richiede una chiave univoca stringa. Questa limitazione è documented in the Solr wiki.

Here's the issue nel progetto JIRA.

+1

Problema risolto! Grazie per aver confermato che Mauricio e per i link. Poiché non avrò bisogno di QueryElevationComponent, l'ho rimosso e il relativo gestore dal mio file solrconfig.xml per evitare il problema. – bea

-2

Se siete ancora alla ricerca di una risposta,

In schema.xml, sono i seguenti

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

In elevate.xml, utilizzare questo ID per mappare il termine di ricerca per il miglior risultato scommessa .

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

Qui, 4602376f-9741-407b-896e-645ec3ead457 è il valore nel campo "id" del il miglior documento scommessa. Wish, Solr ci consente di specificare qualsiasi campo chiave primaria, ad esempio employeeid o productid per specificare in elev.xml