2010-09-02 64 views
6

我最近安裝了solr。示例索引(在apache-solr - #。#。#\ example \ solr中找到)似乎可行,並且一旦複製到我的solr主目錄中,我就可以通過管理頁面訪問它。然而,當我嘗試用(取自here)更換schema.xml中的內容,以實現一個新的指標:Solr:QueryElevationComponent需要StrField uniqueKeyField錯誤

<?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狀態500 - Solr中配置很嚴重的錯誤... org.apache.solr.common.SolrException:QueryElevationComponent需要的架構在org.apache的org.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:157)處使用StrField實現uniqueKeyField。 「Solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:508)at ...」

我的谷歌搜索很少幫助,所以我希望有可能有人在這裏誰可能碰到這個問題和/或有一些想法如何解決它?

在此先感謝您的任何建議,比衣。

回答

11

是的,此刻QueryElevationComponent需要一個字符串唯一鍵。這個限制是documented in the Solr wiki

Here's the issue在項目JIRA。

+1

問題已解決!感謝您確認Mauricio和鏈接。因爲我不需要QueryElevationComponent,所以我從solrconfig.xml文件中刪除了它和它的處理程序,以避免這個問題。 – bea 2010-09-03 19:46:36

-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」字段中的值。希望,Solr允許我們指定任何主鍵字段,例如employeeid或productid以指定在elevate.xml中。