我正在尝试为项目添加全文本搜索功能。我不想存储所有文档的全部内容,因此我决定对“ 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并没有说明需要存储这种类型的更新的所有字段。
答案 0 :(得分:0)
我找到了解决方案。这是我的错误-我认为布尔字段是数字。这就是为什么就地更新对我不起作用的原因(因为Solr进行了常见的原子更新)。
由于我已将is_deleted
字段从boolean更改为int,所以一切正常,并且在更新content
时不会丢失is_deleted
的数据。
所以答案是: 使用就地更新时,Solr不需要存储所有字段。
感谢EricLavault提到字段类型的要求。很有帮助)