我在solr索引中有没有日期字段的文档。我想删除所有这些文件。以下不起作用,即使
日期:[* TO *]
生成我想要保留的文档,
-date:[* TO *]
生成我想删除的文件
/usr/bin/curl http:// localhost:8080/solr/update -H "Content-Type: text/xml" --data-binary '<delete><query>-date:[* TO *]</query></delete>'
/usr/bin/curl http:// localhost:8080/solr/update -H "Content-Type: text/xml" --data-binary '<commit/>'
/usr/bin/curl http:// localhost:8080/solr/update -H "Content-Type: text/xml" --data-binary '<optimize/>'
结果:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">16</int>
</lst></response>
<?xml version="1.0" encoding="UTF-8"?><response><lst name="responseHeader"><int name="status">0</int><int name="QTime">140</int></lst></response>
<?xml version="1.0" encoding="UTF-8"?><response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">41</int></lst>
</response>
注意:删除日期:[* TO *]文档效果很好。
答案 0 :(得分:1)
我遇到了同样的问题。解决方案是添加一个引用id的附加条件。所以我最终有了
<delete><query>-date:[* TO *] AND id:(*)</query></delete>
正如您所看到的,id可以有任何价值。
答案 1 :(得分:1)
/update?stream.body=<delete><query>*:* -(date:[* TO *])</query></delete>&commit=true
编辑:有人低估了我的答案,因为我没有解释。这是:
*:*
表示所有文件date:[* TO *]
表示所有具有日期字段的文档*:* -(date:[* TO *])
所有没有日期字段的文档commit=true
表示将更改提交到索引为什么<delete><query>-date:[* TO *]</query></delete>
不起作用?坦率地说,我不确定。更新语法与查询语法不同。如果我将来发现更多,我会发布更多信息。