2011-03-03 71 views
0

我在索引索引中没有日期字段的文档。我想删除所有这些文件。继不起作用,即使无法从索尔索引中删除否定选择

日期:[*到*]

产生我想保留的文件,并

-date:[*到*]

产生我想要的文件删除。
/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>

注意:删除日期:[*到*]的文档。

+0

解决方法是搜索 – ema 2011-03-04 00:09:09

+1

解决方法是删除'*:* -date:[* TO *]' – ema 2011-03-04 01:53:42

回答

1

我有同样的问题。解决方法是添加一个引用id的附加条件。所以我最后得到了

<delete><query>-date:[* TO *] AND id:(*)</query></delete> 

正如你所看到的id可以有任何值。

1
/update?stream.body=<delete><query>*:* -(date:[* TO *])</query></delete>&commit=true 

编辑:有人因为我没有解释它而低估了我的答案。那就是:

  1. *:*意味着所有文件
  2. date:[* TO *]是指具有日期字段
  3. *:* -(date:[* TO *])所有文件的所有文件不具有日期字段
  4. commit=true方式提交更改索引

为什么<delete><query>-date:[* TO *]</query></delete>不起作用?坦率地说,我不确定。更新语法与查询语法不同。如果我将来会更多地了解,我会发布更多信息。

+2

请解释您的答案! – Tim 2011-12-23 10:48:24