如何使用布尔 NOT 概念从 Solr 中选择/删除所有文档?
即如何从Solr 中删除ID 不以A59 开头的所有文档?
用来-
表示NOT
。
例如,要查询 id 不是以 A59 开头的文档,则查询为:-id:A59*
,即:/solr/select/?q=-id:A59*
要通过查询删除,请将删除消息中的查询发布到更新处理程序,如此处指定。
编辑:(NOT
全部大写)也可以用作布尔运算符
感叹号也适用于 NOT,所以:
/solr/select/?q=!id:A59*
应该在上述情况下工作。
我不相信查询的否定删除有效。请参阅此 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 版
在文件前面使用 - 符号表示排除该特定值。它会给出不等于的结果
以下是示例 url 查询字符串 where。我保留了“ &fq=-HQ_City_Code:MEL ”,
它将跳过所有具有HQ_City_Code值MEL的结果。
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
在删除之前,请确保您所指的 id 是字符串,绝不会由两个术语组合而成。我会这样做的方法是从脚本中读取来自 solr 的数据并执行单个删除或批量删除,因为它提供了对每个 id 的更好控制和验证,从而降低了错误删除的风险因此 1 从 solr 中读取数据使用 /solr/select/?q=id:A59* 的脚本
2 验证和验证 id
3 一个一个删除或一次删除一组10个id
问候
拉贾特
正如毛里西奥所说:
使用 - 符号指示您要在查询中排除的内容。以下两个查询将删除除以 A59 开头的文档之外的所有文档。
GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>
第一行执行删除操作。第二行进行提交。