更新Solr文档结果重复版本

w9apscun  于 2023-03-18  发布在  Solr
关注(0)|答案(1)|浏览(229)

在我的.net core项目中,我通过以下方法更新SOLR文档:

public Task<HttpResponseMessage> UpdateDocumentAsync(List<SolrDocument> SolrDocument, CancellationToken cancellationToken)
    {
        _request.Method = HttpMethod.Post;

        _request.RequestUri = new Uri($"{this._baseUri}/update?overwrite=true&commitWithin=2000&wt=json");

        var content = new StringContent(JsonConvert.SerializeObject(SolrDocument), Encoding.UTF8, "application/json");

        _request.Content = content;

        return base.SendAsync(_request, cancellationToken);
    }

正如你所看到的,我甚至声明overwrite=true命令对我的更新URL.在发布这个问题之前,我遇到了其他类似的主题,并看到定义一个唯一的字段SOLR模式将有所帮助,否则SOLR将永远不会知道我是否更新和现有的文档.然后我检查了我的模式,看到一个唯一的字段已经定义.我分享我的模式的必要部分如下:

<?xml version="1.0" encoding="UTF-8" ?>
    <schema name="My Project Solr 7.2.0 (stable version) Instance" version="1.6">
    <field name="id" type="string" indexed="true" stored="true" required="true" />
    <field name="_version_" type="long" indexed="true" stored="true"/>
    <!-- tons of other fields -->
    <uniqueKey>id</uniqueKey>

这样我就找不到真实的的问题了,我在SOLR中更新一张单据时,会产生另一张id相同,_version_不同的单据,之后我发\select请求,查询id:12345,SOLR会列出一张单据但是有时候会带来更新的单据,有时候会带来没有更新的单据。
需要说明的是,SOLR从不列出两个具有相同id的文档,但是同一文档的旧版本仍然继续存在于SOLR中,因此,这导致了应用程序上的超级混乱。
仅供参考,我最近通过添加一些额外的字段更新了架构。在上面描述的问题中,我无法在旧文档上看到新字段(这是非常正常的),但我可以看到我的新字段上的 * 其他 * 更新的文档与不同的_version_(但是id是一样的),是这样吗?如果是这样的话,在更新的时候,如何强制SOLR处理掉当前不包含新字段的单据?
先谢了。

k5hmc34c

k5hmc34c1#

结果是我当前的core与文档的原始核心不同,因此最终用一个新的_verion_索引了我当前的核心。

相关问题