Не могли бы вы помочь мне понять, почему у меня такие результаты для оптимистического обновления параллелизма.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>
...
В schema.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, я могу 't использовать частичные запросы на обновление, содержащие поле подписи (известное ограничение Solr). Поэтому я пытаюсь обновить документы с оптимистичным обновлением параллелизма.
Согласно документу Optimistic Concurrency, если указать версию документа на обновление, то присутствие версии поле инструктирует 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
}
}
Почему такие результаты?