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

时间:2016-04-13 15:10:31

标签: solr

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

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

字段定义是:

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

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

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

我希望d5作为结果,但我得到:

{{1}}

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

1 个答案:

答案 0 :(得分:0)

我可以看到两件事情在这里:

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

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

  3. 我建议相应地更改两个点,以使块连接查询解析器正常工作。