gpt4 book ai didi

Solr 在过滤子文档时返回不正确的结果

转载 作者:行者123 更新时间:2023-12-02 04:41:59 25 4
gpt4 key购买 nike

我正在使用 Solr 5.4.0。我导入了一些带有嵌套文档的简单数据:

<doc>
<field name="id">d1</field>
<field name="content_type">parent_document</field>
<doc>
<field name="id">d2</field>
<field name="content_type">related_parent</field>
</doc>
</doc>
<doc>
<field name="id">d3</field>
<field name="content_type">parent</field>
<doc>
<field name="id">d4</field>
<field name="content_type">related_parent</field>
</doc>
</doc>
<doc>
<field name="id">d5</field>
<field name="content_type">parent</field>
<doc>
<field name="id">d2</field>
<field name="content_type">related_parent</field>
</doc>
</doc>

字段定义是:

<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="content_type" type="lowercase" omitTermFreqAndPositions="true" multiValued="false" indexed="true" required="true" stored="true"/>

<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

我需要找到所有将 d2 作为子文档的文档。我使用查询:

q={!parent which=content_type:parent}id:d2  

我希望结果是 d5,但我得到的是:

"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": "d3",
"content_type": "parent",
"_version_": 1531507509621162000,
"_root_": "d3"
},
{
"id": "d5",
"content_type": "parent",
"_version_": 1531507848756854800,
"_root_": "d5"
}
]
}

这里为什么返回d3?我应该在此查询中添加什么条件以过滤掉 d3?

最佳答案

我可以看到这里发生了两件事:

  1. 正如我在 https://stackoverflow.com/a/31952527/3229995 中的回答,字段“content_type”应该只存在于父文档中。我在以前的 Solr 版本中有一些不一致的行为,在子文档中存在具有其他值的字段“content_type”,我不知道这个问题是否已在当前版本中得到解决。

  2. 您的数据集中有两个 id="d2"的文档。在 Solr 中,每个文档都有一个唯一的标识符,默认情况下这是 id 字段。您的集合中不能有两个具有相同唯一标识符的文档。

我建议相应地更改这两点以使 block 连接查询解析器正常工作。

关于Solr 在过滤子文档时返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602638/

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