Solr:当字段没有丢失时“缺少必填字段”错误?

时间:2012-03-16 22:00:35

标签: solr

我在jetty-6.1-SNAPSHOT下使用Solr 3.5.0和示例服务器。我已经开始使用默认的schema.xml,删除了默认的<field>定义,并指定了我自己的定义,包括:

<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"/>

我已将content字段的索引设置为false,因为我稍后尝试在模式中的copyField定义中使用此字段。我已将set存储为false,因为我不需要在查询结果中看到此content字段。

稍后在架构中,我定义了这些copyField:

<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字段定义的indexed =“true”,它就可以工作。或者如果我把它放回false并设置stored =“true”,那么它也可以工作。如果索引和存储设置为false,它总是会失败。

如果我没有定义使用内容字段的copyField,那么这是有道理的。示例模式注释甚至声明:

  

“为了获得最佳索引大小和搜索性能,请将”index“设置为false   对于所有常规文本字段,请使用copyField将它们复制到   catchall“text”字段,并用于搜索。“

那么最有效的方法是什么?

1 个答案:

答案 0 :(得分:5)

必填字段必须标记为已编入索引或存储 您可以删除这两个字段的必需属性,并将索引和存储为false。

由于文本字段只能搜索,因此您可以将字段类型设置为普通字符串,而不对其他字段进行任何分析。