代码之家  ›  专栏  ›  技术社区  ›  Rick Hodder

SOLR 7.1索引字段被视为字段-出现在结果中

  •  1
  • Rick Hodder  · 技术社区  · 8 年前

    我正在将SOLR 4.10 db转换为SOLR 7.1

    在4.10中,我有一个字段是过期日期,我限制了SOLR查询的范围,因此我在输出中的字段中创建了一个日期类型的索引字段和一个复制字段。

    <field name="IDX_ExpirationDate" type="date" indexed="true" stored="false" multiValued="true" />
    <field name="ExpirationDate" type = "date" indexed = "true" stored = "true" />
    <copyField source="ExpirationDate" dest="IDX_ExpirationDate"/>
    

    使用上面4.10中的模式,当我运行一个查询时,我会按预期在结果中获得ExpirationDate。

     {
        ...
                "ExpirationDate":"2015-09-29T00:00:00Z",
        ...
        }
    

    SOLR 7.1去掉了“date”类型,并将其替换为“pdate”类型,因此我在7.1模式中进行了更改(仅将date更改为pdate)

    <field name="IDX_ExpirationDate" type="pdate" indexed="true" stored="false" multiValued="true" />
    <field name="ExpirationDate" type = "pdate" indexed = "true" stored = "true" />   
    <copyField source="ExpirationDate" dest="IDX_ExpirationDate"/>
    

    现在,当我运行SOLR 7.1查询时,我在结果中看到ExpirationDate和IDX\u ExpirationDate,更糟糕的是,它在日期周围添加了方括号。(我正在json中查看结果)。所以基本上有两个问题。第一个IDX\U ExpirationDate不应出现在结果中,因为架构中的“存储”属性为false。其次,方括号将日期视为数组而不是日期,并且JSON反序列化失败。

    {
    ...
            "ExpirationDate":"2015-09-29T00:00:00Z",
            "IDX_ExpirationDate":["2015-09-29T00:00:00Z"],
    ...
    }
    

    是否有自4.10版以来更改的设置会导致出现此问题?或者是否需要设置额外的属性?

    我还有其他IDX\ux项目,但它们都是type=“text\u general”而不是pdate-并且它们不会出现在查询结果中。

    1 回复  |  直到 8 年前
        1
  •  1
  •   MatsLindh    8 年前

    如果字段类型已启用docValues,并且架构版本设置为至少1.6,则docValues将用作 stored value if the stored value is not available .

    对于架构版本>=1.6,隐含默认值为 useDocValuesAsStored="true" .

    由于docValues是使点日期可排序所必需的,因此我认为它们当前默认启用:

    对于单值字段,必须使用docValues=“true”来启用排序。

    所以要“修复”这个问题,请清除索引,设置 useDocValuesAsStored="false" 用于字段类型和重新索引。但你或多或少都是免费的,所以这真的不应该是个问题。

    这个 [ ] 围绕值是因为该值以列表形式返回,因为该字段是多值的。