30

如何使用布尔 NOT 概念从 Solr 中选择/删除所有文档?

即如何从Solr 中删除ID 不以A59 开头的所有文档?

4

6 回答 6

69

用来-表示NOT

例如,要查询 id 不是以 A59 开头的文档,则查询为:-id:A59*,即:/solr/select/?q=-id:A59*

要通过查询删除,请将删除消息中的查询发布到更新处理程序,如此处指定

编辑:(NOT全部大写)也可以用作布尔运算符

于 2008-12-19T01:41:38.827 回答
11

感叹号也适用于 NOT,所以:

/solr/select/?q=!id:A59*

应该在上述情况下工作。

于 2012-09-10T12:41:48.383 回答
1

我不相信查询的否定删除有效。请参阅此 Jira 票证: https ://issues.apache.org/jira/browse/SOLR-381

他们确实说有一种解决方法可以在 : 中添加前缀,但我对此没有任何运气。

这不起作用(与使用 NOT 相同) java -Ddata=args -jar /opt/solr/example/exampledocs/post.jar "-userid:*" java -jar /opt/solr/example/exampledocs/post.jar *.xml

添加 : 会产生语法错误(与使用 NOT 相同) java -Ddata=args -jar /opt/solr/example/exampledocs/post.jar ": -userid:*" java -jar /opt/solr/example/示例文档/post.jar *.xml

SimplePostTool:1.4 版 SimplePostTool:将参数发布到http://localhost:8983/solr/update .. SimplePostTool:致命:Solr 返回错误 #400 解析 Lucene 查询时出错 SimplePostTool:1.4 版

于 2012-04-04T17:23:22.870 回答
1

在文件前面使用 - 符号表示排除该特定值。它会给出不等于的结果

以下是示例 url 查询字符串 where。我保留了“ &fq=-HQ_City_Code:MEL ”,

它将跳过所有具有HQ_City_CodeMEL的结果。

http://localhost:8983/solr/HQ_SOLR_Hotels/select?q=*:*&fq=HQ_National_Code:TH&fq=HQ_TYPE:hotel_EN&fq=HQ_Country_Code:AU&**fq=-HQ_City_Code:MEL**&wt=json&indent=true
于 2017-03-13T05:35:28.037 回答
0

在删除之前,请确保您所指的 id 是字符串,绝不会由两个术语组合而成。我会这样做的方法是从脚本中读取来自 solr 的数据并执行单个删除或批量删除,因为它提供了对每个 id 的更好控制和验证,从而降低了错误删除的风险因此 1 从 solr 中读取数据使用 /solr/select/?q=id:A59* 的脚本

2 验证和验证 id

3 一个一个删除或一次删除一组10个id

问候

拉贾特

于 2013-12-23T16:30:25.550 回答
0

正如毛里西奥所说:

使用 - 符号指示您要在查询中排除的内容。以下两个查询将删除除以 A59 开头的文档之外的所有文档。

GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>

第一行执行删除操作。第二行进行提交。

于 2014-05-30T19:50:49.403 回答