如何使用布尔NOT概念从Solr中选择/删除所有文档?
即。如何删除Solr的所有文件,其ID不是以A59开头的?
答案 0 :(得分:63)
使用-
表示NOT
。
例如,要查询ID不是以A59开头的文档,查询将为:-id:A59*
,即:/solr/select/?q=-id:A59*
要按查询删除,请按照指定的here将删除邮件中的查询发布到更新处理程序。
编辑:NOT
(全部大写)也可以用作布尔运算符
答案 1 :(得分:9)
感叹号也适用于NOT,所以:
/solr/select/?q=!id:A59*
应该适用于上述情况。
答案 2 :(得分: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
添加a:给出语法错误(与使用NOT相同) java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar“: - userid:*” java -jar /opt/solr/example/exampledocs/post.jar * .xml
SimplePostTool:版本1.4 SimplePostTool:将args张贴到http://localhost:8983/solr/update .. SimplePostTool:FATAL:Solr返回错误#400解析Lucene查询时出错 SimplePostTool:版本1.4
答案 3 :(得分:0)
在删除之前请确保您所指的ID是字符串,并且绝不会由两个术语组合形成。 我这样做的方法是从脚本中读取solr中的数据并进行单个删除或批量删除,因为它可以更好地控制和验证每个ID,从而降低错误删除的风险 于是 1使用从脚本中读取solr中的数据 / solr的/选择/ Q = ID:A59 *
2验证并验证ID
3一次删除它们或一次删除一组10个
此致
拉杰特
答案 4 :(得分:0)
正如Mauricio所述:
使用 - 符号表示要在查询中排除的内容。 以下两个查询将删除除以A59开头的所有文档。
GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>
第一行执行删除操作。 第二行执行提交。
答案 5 :(得分:0)
在文件前面使用 - 符号表示排除该特定值。它会给出 NOT Equal
等结果以下是示例url查询字符串所在的位置。我保留了&#34; &amp; fq = -HQ_City_Code:MEL &#34;,
它会跳过所有 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