Solr Полное освежение не очищает индекс
-
10-12-2019 - |
Вопрос
У меня есть проблема, где Solr не исчезнет индекс во время полного импорта.
Все серверы запускают SOLR 3.4, конфигурация так же ваниль, как это может быть.
Я попробовал это в нашей среде разработки и на экземпляре на своем собственном компьютере и получил аналогичные результаты.
Схема довольно проста, это основные точки:
<schema name="System" version="1.4">
...
</types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
<fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0" />
<fieldType name="documentKey" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
</types>
<fields>
<field name="document_id" type="documentKey" indexed="true" stored="true" required="true" />
<field name="entity_id" type="long" indexed="true" stored="true" required="true" />
<field name="name" type="string" indexed="true" stored="true" required="true" />
<field name="entity_type" type="string" indexed="true" stored="true" required="false" />
<field name="Timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
</fields>
</schema>
.
Примечание: - поле Document_ID рассчитывается в материализованном представлении, который используется для заполнения индекса и представляет собой комбинацию других полей, а не в этом индексе, а является независимым от Entity_id. Это уникально. - поле Entity_id - это ключ пара таблиц, и для того же Document_id он может дико изменяться между обновлением и другим.
Перед полным обновлением, если я запрашу индекс как таковой:
http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22
.
Я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">5</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<date name="Timestamp">2012-03-08T09:47:26.335Z</date>
<str name="document_id">French_Polynesia/Huahine~4034376</str>
<long name="entity_id">22902728</long>
<str name="name">Huahine</str>
<str name="type">LOCATION</str>
</doc>
</result>
</response>
.
Тогда я обновляю:
http://localhost:8080/qq-solr/system/dataimport?command=full-import&clean=true&commit=true&optimize=true
.
(Я знаю чистый, коммит и оптимизировать избыточно, но я использовал их просто чтобы убедиться), а через некоторое время я получаю сообщение о том, что все A-OK.
Тогда я запрошу индекс еще раз:
http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22
.
и я получаю:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">5</int>
<lst name="params">
<str name="indent">true</str>
<str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<date name="Timestamp">2012-03-09T08:31:07.317Z</date>
<str name="document_id">French_Polynesia/Huahine~4034376</str>
<long name="entity_id">22902728</long>
<str name="name">Huahine</str>
<str name="type">LOCATION</str>
</doc>
</result>
</response>
.
Но в базе данных entity_id другой!
Я вижу, что Timestamp был обновлен, так что запись была затронута, но почему старая ценность сохраняется?
Решение
Я бы запустил процесс Dataimporthandler (DIH) через Режим интерактивной разработки Вы можете заверить, что ваш запрос базы данных извлекает entity_id, который вы ожидаете.Поскольку Timestamp на запись Solr обновляется, ваш процесс DIH работает, но я догадаюсь, что причина для этого лежит в том, как данные извлекаются.
Другие советы
В любое время я выполняю такую операцию с SOLR, я всегда вручную очищаю индекс сначала, используя завиток, чтобы быть на 100%, конечно, его уничтожено.Вот учебник: http://www.alphadevx.com/A / 365-Clearing-A-Solr-поиск-индекс