Boolean НЕ в запросе solr
Как выбрать/удалить все документы из Solr с помощью логического понятия NOT?
то есть. Как удалить все документы из Solr, который id не запускается с A59?
Ответы
Ответ 1
Используйте '-' для обозначения NOT.
Например, для запроса документов с идентификатором, не начинающимся с A59, запрос будет выглядеть следующим образом: -id:A59*
, то есть: /solr/select/?q=-id:A59*
Чтобы удалить по запросу, отправьте запрос в сообщении об удалении обработчику обновления, как указано здесь.
EDIT: NOT (все прописные буквы) также можно использовать как оператор
Ответ 2
Восклицание работает и для NOT, поэтому:
/solr/select/?q=!id:A59*
должен работать в приведенном выше случае.
Ответ 3
Я не считаю, что работает отрицательное удаление по запросу. См. Этот билет Джиры: https://issues.apache.org/jira/browse/SOLR-381
Они говорят, что в префиксе есть обходной путь: a, но мне не повезло с этим.
Это не работает (то же самое с использованием NOT)
java -Ddata = args -jar/opt/solr/example/exampledocs/post.jar "-userid: *"
java -jar/opt/solr/example/exampledocs/post.jar *.xml
Добавление в a: дает синтаксическую ошибку (то же самое с использованием 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: POSTing args http://localhost:8983/solr/update..
SimplePostTool: FATAL: Solr вернула ошибку # 400 Ошибка при анализе запроса Lucene
SimplePostTool: версия 1.4
Ответ 4
перед удалением, пожалуйста, убедитесь, что идентификаторы, которые вы имеете в виду, являются строкой и никоим образом не будут образованы с помощью двух слагаемых.
То, как я это сделаю, - это прочитать данные из solr из script и выполнить исключительное удаление или в пакетах, поскольку он обеспечивает лучший контроль и проверку над каждым идентификатором, что снижает риск неправильного удаления
следовательно
1 прочитайте данные из solr из script, используя
/Solr/ выбрать/д = ID: A59 *
2 проверить и проверить идентификаторы
3 удаляют их по одному или в группе из 10 идентификаторов одновременно
Привет
Раджат
Ответ 5
Как Mauricio заявил:
Используйте символ -, чтобы указать, что вы хотите исключить в своем запросе.
Следующие два запроса удаляют все документы, кроме тех, которые начинаются с A59.
GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>
В первой строке выполняется операция удаления.
Вторая строка выполняет фиксацию.
Ответ 6
Использование символа-символа перед файлами означает, что исключить это конкретное значение. Это даст результат как НЕ равно
Ниже приведен пример строки запроса 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