Как сделать запрос NOT IN в Solr?

19

Как я могу исключить набор идентификаторов документов из набора результатов Solr? По существу что-то вроде

/select?q=tag_id:367 AND NOT id:(306670,302209)

Я попробовал, и он не исключает документы с этими идентификаторами.

    
задан arun 08.08.2012 в 02:01
источник

2 ответа

23

Попробуйте следующее:

/select?q=*:*&fq=tag_id:367 AND id:[* TO *] -id:(306670 302209)

Это должно позволить вам создать добавление как можно большего количества идентификаторов, не добавляя -id:302209 каждый раз, когда вы хотите удалить идентификатор. Обратное также верно, вы можете поменять - на + и заставить массив значений также присутствовать.

    
ответ дан harmstyler 08.08.2012 в 04:42
  • Thx для указания формата q = *: *. Тот, который вы предлагаете, по-прежнему не исключает документы с идентификаторами 306670 и 302209. Но это делает: / select? Q = *: * & fq = tag_id: 367 AND -id: 306670 AND -id: 302209 По сути, функциональность группировки с скобки не работают для меня. –  arun 09.08.2012 в 18:06
  • Возможно, потому, что я почему-то добавил запятые, вместо этого попробуйте их разделить. Я также обновлю свой код. –  harmstyler 09.08.2012 в 20:28
  • Yup, работали пробелы. Спасибо! –  arun 10.08.2012 в 01:50
  • Я предполагаю, что И id: [* TO *] не нужно? –  arun 10.08.2012 в 16:07
  • Чтобы быть явным, запрос такой же, как / select? q = *: * & fq = + tag_id: 367 AND -id: (306670 ИЛИ 302209), что совпадает с / select? q = *: * & fq = + tag_id: 367 AND -id: 306670 AND -id: 302209 –  arun 10.08.2012 в 16:10
8

Найдено одно решение:

/select?q=tag_id:367&fq=-id:306670 AND -id:302209

Не уверен, что это лучший способ сделать это, хотя!

    
ответ дан arun 08.08.2012 в 02:23
  • Вот так - вы также можете сделать id: -306670 -302209 –  Ansari 08.08.2012 в 02:24
  • Thx для подтверждения. Однако альтернативный синтаксис вызывает для меня org.apache.lucene.queryParser.ParseException. –  arun 08.08.2012 в 02:36
  • Хмм, возможно, потому, что поле поиска по умолчанию не установлено в id. –  Ansari 08.08.2012 в 02:42
  • Правильно, идентификатор не является полем поиска по умолчанию. –  arun 09.08.2012 в 18:09