Вопрос
Как мне выбрать/удалить все документы из Solr, используя логическое понятие NOT?
то естьКак удалить из Solr все документы, идентификатор которых НЕ начинается с A59?
Решение
Использовать -
Отображать NOT
.
Например, чтобы запросить документы с идентификатором, не начинающимся с 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/exampledocs/post.jar *.xml
SimplePostTool:версия 1.4 SimplePostTool:Отправка аргументов в http://localhost:8983/solr/update..SimplePostTool:ФАТАЛЬНО:Solr вернул ошибку #400 Ошибка разбора запроса Lucene SimplePostTool:версия 1.4
перед удалением убедитесь, что идентификаторы, на которые вы ссылаетесь, являются строками и никоим образом не могут быть образованы двумя объединенными терминами.Я бы сделал это, чтобы прочитать данные из solr из сценария и сделать единственное удаление или в партиях, потому что это обеспечивает лучший контроль и проверки над каждым идентификатором, что снижает риск неправильного удаления Отсюда 1 читать данные из solr из скрипта, используя /solr/select/?q=id:A59*
2 проверить и подтвердить идентификаторы
3 удалить их по одному или группой из 10 идентификаторов одновременно
С уважением
Раджат
Как Маурисио заявил:
Используйте символ -, чтобы указать, что вы хотите исключить из запроса.Следующие два запроса удалят все документы, кроме тех, которые начинаются с A59.
GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>
Первая строка выполняет операцию удаления.Вторая строка выполняет фиксацию.
Использование символа - перед файлами означает исключение этого конкретного значения.Это даст результат вроде Не равный
Ниже приведен пример строки запроса URL-адреса.Я сохранил"&fq=-HQ_City_Code:MEL",
Он пропустит весь результат, который имеет HQ_City_Code ценить МЭЛ.
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