无法从solr索引中删除否定选择

时间:2011-03-03 23:23:43

标签: solr

我在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 *]文档效果很好。

2 个答案:

答案 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

编辑:有人低估了我的答案,因为我没有解释。这是:

  1. *:*表示所有文件
  2. date:[* TO *]表示所有具有日期字段的文档
  3. *:* -(date:[* TO *])所有没有日期字段的文档
  4. commit=true表示将更改提交到索引
  5. 为什么<delete><query>-date:[* TO *]</query></delete>不起作用?坦率地说,我不确定。更新语法与查询语法不同。如果我将来发现更多,我会发布更多信息。