使用单个字段的就地更新时,是否需要在Solr中存储所有其他字段?

时间:2018-11-06 21:09:49

标签: solr lucene

我正在尝试为项目添加全文本搜索功能。我不想存储所有文档的全部内容,因此我决定对“ content”字段使用stored =“ false”。此外,还有一个布尔值字段指示是否删除了文档。当我在Solr中创建新文档时,它的效果很好。但是,当我更新is_deleted字段时,“内容”似乎从索引中丢失了,我无法再搜索该文档。

我发现a post表示在就地更新时不需要存储字段,但对我来说不起作用。

一些详细信息:

模式:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="_version_" type="plong" indexed="false" stored="false" docValues="true"/>
<field name="is_deleted" type="boolean" indexed="false" stored="false" docValues="true"/>
<field name="content" type="text_general" indexed="true" stored="false" multiValued="true"/>

使用“ / update”处理程序添加测试文档:

{
"id": "doc1",
"is_deleted": false,
"content": "SEARCH ME"
}

更新文档:

{
"id": "doc1",
"is_deleted": {"set": true}
}

使用Solr v 7.5.0。

Solr In-Place update documentation并没有说明需要存储这种类型的更新的所有字段。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。这是我的错误-我认为布尔字段是数字。这就是为什么就地更新对我不起作用的原因(因为Solr进行了常见的原子更新)。

由于我已将is_deleted字段从boolean更改为int,所以一切正常,并且在更新content时不会丢失is_deleted的数据。

所以答案是: 使用就地更新时,Solr不需要存储所有字段。

感谢EricLavault提到字段类型的要求。很有帮助)