Удаление Solr не будет работать после обновления схемы

Я использую SolrNET для размещения документов в индексе Solr, а также для удаления документов из индекса.

Это работает до сих пор.

Я сделал следующее:

  • В schema.config добавлено строковое поле (в этом новом поле хранится GUID) вместо предыдущего поля UUID.
  • Перезапущенный Томкэт

(Я переключился с поля UUID на строковое поле, потому что оно меня не устраивало, но это уже другая история.)

Вот как выглядит мой schema.config:

<fields>
      <field name="id" type="int" indexed="true" stored="true" required="true" />
      <field name="searchobjecttype" type="string" indexed="true" stored="true" required="true" />
      <field name="heading" type="text" indexed="true" stored="false" required="false" />
      <field name="body" type="text" indexed="true" stored="false" required="false" />
      <field name="locationid" type="int" indexed="true" stored="true" required="false" />
      <field name="currentlocationid" type="int" indexed="true" stored="true" required="false" />
      <field name="countryid" type="int" indexed="true" stored="true" required="false" />
      <field name="currentcountryid" type="int" indexed="true" stored="true" required="false" />
      <field name="forumroom" type="int" indexed="true" stored="true" required="false" />
        <field name="forumtopicid" type="int" indexed="true" stored="true" required="false" />
      <field name="dt" type="date" indexed="true" stored="false" required="false" />
      <field name="txt" type="text" indexed="true" stored="true" multiValued="true" />
      **<field name="guid" type="text" indexed="true" stored="true" required="false" />**
  </fields>
      <copyField source="id" dest="txt" />
      <copyField source="searchobjecttype" dest="txt" />
      <copyField source="heading" dest="txt" />
      <copyField source="body" dest="txt" />
      <copyField source="locationid" dest="txt" />
      <copyField source="currentlocationid" dest="txt" />
      <copyField source="countryid" dest="txt" />
      <copyField source="currentcountryid" dest="txt" />
      <copyField source="forumroom" dest="txt" />
      <copyField source="forumtopicid" dest="txt" />
      <copyField source="dt" dest="txt" />
      **<uniqueKey>guid</uniqueKey>**
      <defaultSearchField>txt</defaultSearchField>
      <solrQueryParser defaultOperator="AND" /> 

Этот запрос работал раньше:

var q = solr.Query(Query.Field("id").Is(item.Id.ToString()) && Query.Field("searchobjecttype").Is(item.SearchObjectType));

solr.Delete(q);
solr.Commit();

Пока не получится сейчас.

При отладке я вижу, что запрос соответствует документам (свойство NumFound возвращает больше 0, когда запрос находит элементы). Однако ничего не удаляется.

Когда я пытаюсь удалить тот же документ через веб-интерфейс Solr, он работает.

Что мне не хватает? :)

Привет и спасибо.


person Martin S Ek    schedule 11.08.2011    source источник
comment
почему поле UUID не работало?   -  person Mauricio Scheffer    schedule 11.08.2011
comment
Это сработало, однако я не мог удалить документы из живого индекса, но это сработало на моем локальном компьютере. Следовательно, мой обходной путь, который я собираюсь проверить сейчас. Просто альтернативное решение, чтобы посмотреть, можно ли решить проблему :)   -  person Martin S Ek    schedule 12.08.2011


Ответы (1)


Попробуйте изменить тип поля guid на string (вам придется переиндексировать). Тип поля text, вероятно, выполняет некоторый анализ, и вы не хотите анализировать такие данные, вы хотите индексировать их дословно.

person Mauricio Scheffer    schedule 11.08.2011