Удаление Solr не будет работать после обновления схемы - PullRequest
0 голосов
/ 11 августа 2011

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

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

Что я сделал, так этоthis:

  • В schema.config добавлено строковое поле (в этом новом поле хранится GUID) вместо более раннего поля UUID
  • Restarted Tomcat

(Я переключился с поля 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, он работает.

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

Ура и спасибо.

1 Ответ

1 голос
/ 11 августа 2011

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

...