2010-09-02 2 views
6

Я недавно установил solr. Примерный индекс (найденный в apache-solr - #. #. # \ Example \ solr), похоже, работает, и после копирования в мой домашний каталог solr я могу получить доступ к нему через страницы администрирования. Однако, когда я пытаюсь внедрить новый индекс, заменив содержание schema.xml с (из here):Solr: QueryElevationComponent требует 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> 

Я получаю ошибку конфигурации, которая, кажется, предположить, что uniqueKeyField должен быть реализован с StrField тип (что-то, на что мне трудно поверить, на самом деле?):

«HTTP Status 500 - Серьезные ошибки в конфигурации Solr. ... org.apache.solr.common.SolrException: QueryElevationComponent требует, чтобы схема имеют уникальныйKeyField, реализованный с использованием StrField по адресу org.apache.solr.handler.component.QueryElevationComponent.inform (QueryElevationComponent.java:157) в org.apache. solr.core.SolrResourceLoader.inform (SolrResourceLoader.java:508) в ...»

Мой прибегая к помощи подвернулся очень мало, чтобы помочь, так что я надеюсь, что может быть кто-то здесь, кто мог бы прийти через это выпускать и/или иметь некоторые идеи, как решить эту проблему?

Заранее благодарим за любые советы, Bea.

ответ

11

Да, на данный момент QueryElevationComponent требует строковый уникальный ключ. Это ограничение составляет documented in the Solr wiki.

Here's the issue в проекте JIRA.

+1

Проблема решена! Спасибо, что подтвердили, что Mauricio и ссылки. Поскольку мне не понадобится QueryElevationComponent, я удалил его и его обработчик из файла solrconfig.xml, чтобы избежать проблемы. – bea

-2

Если вы все еще ищете ответ,

В schema.xml, включает в себя следующие

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

В elevate.xml, используйте этот идентификатор, чтобы отобразить условие поиска на лучший результат ставки ,

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

Здесь 4602376f-9741-407b-896e-645ec3ead457 это значение в поле «ID» лучшей ставки документа. Wish, Solr позволяет нам указать любое поле первичного ключа, например employeeid или productid, для указания в файле elevate.xml

Смежные вопросы