2010-09-02 3 views
6

J'ai récemment installé solr. L'index d'exemple (trouvé à apache-solr - #. #. # \ Exemple \ solr) semble fonctionner, et, une fois copié dans mon répertoire personnel de solr, je peux y accéder par les pages d'admin. Cependant, lorsque je tente de mettre en place un nouvel indice en remplaçant la teneur en schema.xml avec (extrait de here):Solr: QueryElevationComponent requiert l'erreur unique StrField unique

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

Je reçois une erreur de configuration, ce qui semble indiquer que le uniqueKeyField doit être mis en œuvre avec un strField type (quelque chose que je trouve difficile à croire est en fait le cas?)):

"HTTP Status 500 - Erreurs graves dans la configuration de solr ... org.apache.solr.common.SolrException: QueryElevationComponent nécessite le schéma à avoir un uniqueKeyField implémenté en utilisant StrField sur org.apache.solr.handler.component.QueryElevationComponent.inform (QueryElevationComponent.java:157) sur org.apache. solr.core.SolrResourceLoader.inform (SolrResourceLoader.java:508) à ... »

Mon googler a tourné très peu pour aider, donc je suis en espérant qu'il pourrait y avoir quelqu'un ici qui aurait pu venir à travers cette émettre et/ou avoir des idées pour le résoudre?

Merci d'avance pour tout conseil, Bea.

Répondre

11

Oui, pour l'instant QueryElevationComponent requiert une clé unique de chaîne. Cette limitation est documented in the Solr wiki.

Here's the issue dans le projet JIRA.

+1

Problème résolu! Merci d'avoir confirmé que Mauricio, et pour les liens. Comme je n'aurai pas besoin de QueryElevationComponent, je l'ai supprimé et son gestionnaire de mon fichier solrconfig.xml pour éviter le problème. – bea

-2

Si vous cherchez toujours une réponse,

En schema.xml, sont les suivants

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

En elevate.xml, utilisez cet ID pour mapper votre terme de recherche pour le meilleur résultat de pari .

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

Ici, 4602376f-9741-407b-896e-645ec3ead457 est la valeur dans le champ "id" du meilleur document de pari. Souhaitez, Solr nous permet de spécifier n'importe quel champ de clé primaire, par exemple employeeid ou productid pour spécifier dans le fichier elevate.xml