Обновление оптимистического параллелизма Solr: конфликт версий

Не могли бы вы помочь мне понять, почему у меня такие результаты для обновления оптимистического параллелизма.

Скажем, у меня есть следующий документ:

{
  "phrase": "some phrase",
  "id": "5d1341797e2ed599",
  "_version_": 1479312171996283000
}

В solrconfig.xml:

<updateRequestProcessorChain name="dedupe"> 
  <processor class="org.apache.solr.update.processor.SignatureUpdateProcessorFactory"> 
    <bool name="enabled">true</bool> 
    <bool name="overwriteDupes">true</bool> 
    <str name="signatureField">id</str> 
    <str name="fields">phrase</str> 
    <str name="signatureClass">org.apache.solr.update.processor.Lookup3Signature</str> 
  </processor>
...

В схеме.xml:

<field name="phrase" type="text_en" indexed="true" stored="true"/>
...
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>
...
<uniqueKey>id</uniqueKey>

Поскольку я использую SignatureUpdate, я не могу использовать запросы частичного обновления, содержащие поле подписи (известное ограничение Solr). Поэтому я пытаюсь обновить документы оптимистичным обновлением параллелизма.

Согласно документу Optimistic Concurrency, если указать версию документа при обновлении, то наличие тега < em>версия указывает Solr принять обновление только в том случае, если версия документа точно совпадает. После успешного завершения обновления документ будет иметь новую версию, которая гарантированно будет выше предыдущей.

Если я отправлю запрос на обновление (поле фразы изменено) следующим образом:

curl http://localhost:8983/solr/collection1/update -H 'Content-type:application/json' -d '
[  {
  "phrase": "some phrase. updated",
  "_version_": 1479312171996283000
} ]'

Я получаю ошибку конфликта:

{
  "responseHeader": {
    "status": 409,
    "QTime": 14
  },
  "error": {
    "msg": "version conflict for f2adc45579faa53a expected=1479312171996283000 actual=-1",
    "code": 409
  }
}

Почему такие результаты?


person Maksim    schedule 18.09.2014    source источник


Ответы (1)


из heliosearch см. объяснение ниже

Если клиент укажет версию, которая не соответствует существующей в Solr версии, будет возвращена ошибка HTTP с кодом 409 (конфликт).

$ curl -i http://localhost:8983/solr/update -H 'Content-type:application/json' -d '
[{"id":"book1", "author":"Mr Bean", "_version_":12345}]'
HTTP/1.1 409 Conflict
Content-Type: text/plain;charset=UTF-8
Transfer-Encoding: chunked

> {
  "responseHeader":{
    "status":409,
    "QTime":1},
  "error":{
    "msg":"version conflict for book1 expected=12345 actual=1408814192853516288",
    "code":409}}

Обратите внимание, что мы использовали параметр curl -i, чтобы показать заголовки HTTP ответа, чтобы убедиться, что это вызвало ошибку уровня HTTP в дополнение к ошибке уровня Solr в теле ответа.

person Halis Yılboğa    schedule 01.01.2015
comment
как вы убедитесь, что версии совпадают? Каково решение ? - person blah; 11.02.2021