Невозможно УДАЛИТЬ все документы в Solr4

У меня есть индекс Solr 4, и я хочу удалить все его документы.

Попытка №1:

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Ccommit/%3E

Результат №1:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
</response>

Под Solr Admin > collection 1 я все еще вижу Num Docs:829060! Я полагаю, это означает, что запрос на удаление не сработал.

Я также вижу результаты, когда иду в

http://www.domain.com:8080/solr/collection1/select?q=*%3A*&wt=xml

Попытка №2 Использование PHP-библиотеки Solarium

    // Create a client instance
    $config = array(
        'endpoint' => array(
            'localhost' => array(
                'host' => '127.0.0.1',
                'port' => 8080,
                'path' => '/solr/',
            )
        )
    );
    $client = new Solarium\Client($config);

    // get an update query instance
    $update = $client->createUpdate();

    // add the delete query and a commit command to the update query
    $update->addDeleteQuery('*:*');
    $update->addCommit();

    // this executes the query and returns the result
    $result = $client->update($update);

    echo '<b>Update query executed</b><br/>';
    echo 'Query status: ' . $result->getStatus(). '<br/>';
    echo 'Query time: ' . $result->getQueryTime();

Вывод №2:

Update query executed
Query status: 0
Query time: 3

Я все еще вижу Num Docs:829060! Это тоже не сработало.

Любые идеи, как решить проблему?


ОБНОВИТЬ

Я вручную удалил индексную папку /collection1/data, сделал полный импорт DIH и все еще не могу удалить документы в новом индексе. Какие-либо предложения?

solrconfig.xml

<requestHandler name="/update" class="solr.UpdateRequestHandler">
  <!-- See below for information on defining 
       updateRequestProcessorChains that can be used by name 
       on each Update Request
    -->
  <!--
     <lst name="defaults">
       <str name="update.chain">dedupe</str>
     </lst>
     -->
</requestHandler>

person Nyxynyx    schedule 07.03.2013    source источник


Ответы (3)


Можете ли вы попробовать запросить solr в командной строке? Например:

curl http://domain.com:8080/solr/collection1/update?commit=true -H "Content-Type: text/xml" --data-binary '<delete><query>*:*</query></delete>'

После выполнения этого запроса вы должны увидеть что-то вроде

INFO: [phisch-dev] webapp=/solr path=/update params={wt=javabin&version=2} {deleteByQuery=*:* (-1428803632004857856)} 0 126

в журналах solr (например, /var/log/tomcat7/catalina.2013-03-07.log).

Я использую здесь POST, просто чтобы быть уверенным, что GET/stream.body не кодирует что-то странным образом. Я добавил атрибут фиксации, поэтому запрос на удаление фиксируется автоматически.

Кроме того, вы внесли какие-либо изменения в свой RequestHandler? Он перезаписывает значения по умолчанию или что-то в этом роде? Проверьте файл solrconfig.xml и найдите /update. Мой содержит (это то, что поставляется с solr):

<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>

Не должно быть <lst name="defaults">, <lst name="appends" или <lst name="invariants">

Кстати, изменения в индексе не видны, пока не будет открыт новый поиск. Что будет, если удалить из индекса и перезапустить solr. Документы еще есть?

EDIT: это ошибка: https://issues.apache.org/jira/browse/SOLR-3432 Добавление поля _version_ в схему исправляет это (спасибо Nyxynyx за эту точность)

person phisch    schedule 07.03.2013
comment
Выполнение предложенного вами curl из оболочки и из моего браузера дало один и тот же ответ The requested resource (/collection1/update) is not available. Как мне проверить наличие изменений в RequestHandler? - person Nyxynyx; 07.03.2013
comment
Извините, это должно быть /solr/collection1/update. (У меня есть специальный экземпляр solr, поэтому я забыл упомянуть часть /solr). Это исправлено в ответе выше - person phisch; 07.03.2013
comment
Спасибо, я использовал обновленную команду curl, перезапустил Solr с помощью Tomcat7, и запрос *:* показывает, что все документы остаются неудаленными. - person Nyxynyx; 07.03.2013
comment
<lst name="defaults"> закомментировано, там больше ничего нет. Обновление исходного сообщения фрагментом... - person Nyxynyx; 07.03.2013
comment
Спасибо за помощь, это ошибка в Solr... issues.apache .org/jira/browse/SOLR-3432 Я отредактировал свою схему, и теперь удаление работает!! Поможет ли обновление моей версии solr? - person Nyxynyx; 07.03.2013
comment
Это должно быть исправлено в 4.0/5.0. Я использую 4.0.0 1394950, но у меня также включен номер версии. - person phisch; 07.03.2013
comment
Я использую 4.0.0-BETA 1370099. Я думаю, мой слишком старый. - person Nyxynyx; 07.03.2013
comment
Версия 4.1 уже доступна в виде финальной версии. Может пора обновиться. - person phisch; 07.03.2013
comment
Solr обновлен до 4.1.0 1434440 и DIH до 4.1.0. Все идет отлично, спасибо :) - person Nyxynyx; 07.03.2013

После того, как вы удалите все записи в первом подходе в индексе, вам все равно придется его зафиксировать:

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Ccommit/%3E
person nfechner    schedule 07.03.2013
comment
Какой запрос вы используете для проверки? - person nfechner; 07.03.2013
comment
Является ли collection1 вашей коллекцией по умолчанию? Вы иногда указываете это, а иногда нет. Может быть, ваше удаление и запрос NumDocs относятся к разным коллекциям. Кроме того, иногда вы используете domain.com, а иногда 127.0.0.1. - person phisch; 07.03.2013
comment
collection1 — коллекция по умолчанию. Только что понял, что в попытке № 2 я не указал collection1, но это коллекция по умолчанию, поэтому я думаю, что все в порядке. Также используется 127.0.0.1, потому что PHP-скрипт выполняется на той же машине, что и solr. - person Nyxynyx; 07.03.2013

Просто запустите приведенную ниже команду в браузере.

http://localhost:8983/solr/update?stream.body=:&commit=true

person bittu    schedule 19.02.2015