Не могли бы вы помочь мне понять, почему у меня такие результаты для обновления оптимистического параллелизма.
Скажем, у меня есть следующий документ:
{
"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
}
}
Почему такие результаты?