gpt4 book ai didi

Solr乐观并发更新: version conflict

转载 作者:行者123 更新时间:2023-12-05 08:10:06 32 4
gpt4 key购买 nike

能否请您帮助我理解为什么乐观并发更新会有这样的结果。

比如说,我有以下文件:

{
"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,所以我不能使用包含签名字段的部分更新请求(已知的 Solr 限制)。所以我尝试用乐观并发更新来更新文档。

根据文档Optimistic Concurrency如果在更新时指定文档版本,则 version 字段的存在指示 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
}
}

为什么会有这样的结果?

最佳答案

来自 heliosearch看下面的解释

If the client specifies a version that does not match what currently exists in Solr, an HTTP error with code 409 (Conflict) will be returned.

$ 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}}

Note that we used the curl option -i to show the response HTTP headers to verify that this generated an HTTP-level error in addition to the Solr-level error in the body of the response.

关于Solr乐观并发更新: version conflict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25914447/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com