solr查询中的否定

时间:2012-05-18 11:12:17

标签: solr solrj

我正在尝试以下查询并且只得到零结果(根据我的数据集,我应该得到10个结果)

http://mymachine:8983/solr/select/?q=-(HOSTID:302)

我也尝试了以下查询,并再次获得零结果。

http://mymachine:8983/solr/select/?q=NOT(HOSTID:302)

然而,当我以这种方式提出查询时,我得到10个结果(预期),

http://mymachine:8983/solr/select/?q=-(HOSTID:302)AND(*:*)

为什么会发生这种奇怪的事情?这是solr中的错误还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

来自solr邮件列表的Ahmet Arslan帮助我找到了解决方案。只是在这里提到它以获得未来的好处。

Solr将顶级否定查询(-field:something)转换为q = + -field:某事

似乎你错过了这一部分。

org.apache.solr.search.QueryUtils

`/** Fixes a negative query by adding a MatchAllDocs query clause.
  * The query passed in *must* be a negative query.
  */
 public static Query fixNegativeQuery(Query q) {
   BooleanQuery newBq = (BooleanQuery)q.clone();
   newBq.add(new MatchAllDocsQuery(), BooleanClause.Occur.MUST);
   return newBq;
 }`