2012-03-16 114 views
1

我在jetty-6.1-SNAPSHOT下使用示例服務器的Solr 3.5.0。我已經開始用默認schema.xml中,刪除默認<field>定義,並指定我自己的,其中包括:Solr:字段沒有丟失時「缺少必填字段」錯誤?

<field name="content" type="text_general" indexed="false" stored="false" required="true" />** 
<field name="title" type="text_general" indexed="false" stored="true" required="true" /> 
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 

我已經進行索引設置爲false,content場,因爲我想使用這個字段在模式中稍後的copyField定義中。並且我將存儲集設置爲false,因爲我不需要在查詢結果中看到這個content字段。

模式中的後來,我有這些copyFields定義:

<copyField source="title" dest="text"/> 
<copyField source="content" dest="text"/> 

這是我的數據樣本:

<add> 
    <doc> 
     <field name="id">2-29-56</field> 
     <field name="title">This is a test</field> 
     <field name="content">This is some content</field> 
    </doc> 
</add> 

我使用運行這個模式的例子Solr的服務器:

C:\solr\example>java -jar start.jar 

然後我嘗試將此示例文檔發送到我的Solr服務器:

C:\solr\example\exampledocs>java -jar post.jar test.xml 

這是我得到的結果:

SimplePostTool: version 1.4 
SimplePostTool: POSTing files to http://localhost:8983/solr/update.. 
SimplePostTool: POSTing file test.xml 
SimplePostTool: FATAL: Solr returned an error #400 [doc=2-29-56] missing required field: content 

我嘗試了很多不同的東西,但如果我更改架構,使索引=「真」爲content字段定義,它的工作原理。或者,如果我把它放回false並設置stored =「true」,那麼它也可以。如果索引和存儲設置爲false,它總是失敗。

如果我沒有定義使用內容字段的copyField,這將會有意義。樣本模式的意見,即使狀態:

「最佳索引大小和搜索性能,設置‘索引’爲假 所有一般的文本字段,請使用copyField將其複製到 包羅萬象的‘文本’字段,使用它進行搜索。「

那麼最有效的方法是做正確的方法是什麼?

回答

4

必填字段必須標記爲索引或存儲。
您可以刪除這兩個字段的必需屬性,並將索引和存儲都設爲false。

由於文本字段只能被搜索,所以您可以將字段類型設置爲普通字符串,而不對其他字段進行任何分析。

+0

有道理,謝謝! – 2012-03-17 16:42:48