Логическое значение NOT в запросе solr

StackOverflow https://stackoverflow.com/questions/271337

  •  06-07-2019
  •  | 
  •  

Вопрос

Как мне выбрать/удалить все документы из 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top