Логическое НЕ в запросе solr - PullRequest
26 голосов
/ 07 ноября 2008

Как мне выбрать / удалить все документы из Solr с использованием логического понятия NOT?

т.е. Как удалить все документы из Solr, чей идентификатор НЕ начинается с A59?

Ответы [ 6 ]

63 голосов
/ 19 декабря 2008

Используйте - для обозначения NOT.

Например, для запроса документов с идентификатором, не начинающимся с A59, запрос будет: -id:A59*, то есть: /solr/select/?q=-id:A59*

Чтобы удалить по запросу, отправьте запрос в сообщении об удалении в обработчик обновлений, как указано здесь .

РЕДАКТИРОВАТЬ: NOT (все заглавные буквы) также может использоваться в качестве логического оператора

9 голосов
/ 10 сентября 2012

Восклицательный знак работает и для НЕ, поэтому:

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

должно работать в случае выше.

1 голос
/ 04 апреля 2012

Я не верю, что отрицательное удаление по запросу работает. Посмотреть этот билет Джира: https://issues.apache.org/jira/browse/SOLR-381

Говорят, что для префикса в: есть обходной путь, но мне не повезло с этим.

Это не работает (то же самое с использованием НЕ) 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/exampledocs/post.jar * .xml

SimplePostTool: версия 1.4 SimplePostTool: размещение аргументов для http://localhost:8983/solr/update.. SimplePostTool: FATAL: Solr возвратил ошибку # 400 Ошибка разбора запроса Lucene SimplePostTool: версия 1.4

0 голосов
/ 13 марта 2017

Использование символа - перед файлами означает, что это исключает конкретное значение. Это даст результат как НЕ равно

Ниже приведен пример строки запроса URL, где. Я сохранил " & 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
0 голосов
/ 30 мая 2014

Как Маурисио указано:

Используйте символ -, чтобы указать, что вы хотите исключить из вашего запроса. Следующие два запроса удаляют все документы, кроме тех, которые начинаются с A59.

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

Первая строка выполняет операцию удаления. Вторая строка выполняет коммит.

0 голосов
/ 23 декабря 2013

перед удалением, пожалуйста, убедитесь, что идентификаторы, на которые вы ссылаетесь, являются строками и никоим образом не будут образованы двумя терминами, объединенными. Я бы сделал это, прочитав данные из solr из скрипта и выполнив отдельное удаление или пакетами, потому что это обеспечивает лучший контроль и проверку каждого идентификатора, что снижает риск неправильного удаления. следовательно 1 прочитать данные из solr из скрипта, используя ? / Solr / выбрать / д = ID: A59 *

2 проверить и подтвердить идентификаторы

3 удалить их по одному или в группе из 10 идентификаторов одновременно

Привет

Раджат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...