solr stats error:没有docValues不能在PointField上计算统计信息

时间:2019-03-17 00:31:18

标签: solr

我正在尝试使用solr 7.x获取搜索的最低/最高价格,以便在此教程之后填充最低/最高价格过滤器:

https://qavi.tech/get-minimum-and-maximum-price-in-solr/

https://lucene.apache.org/solr/guide/6_6/the-stats-component.html

字段:

<field name="price" type="tint" indexed="true" stored="true" required="false" /> 

Solr返回以下错误:

  

“ msg”:“没有docValues不能在PointField上计算统计信息”,       “代码”:400

这可能是什么原因,我必须在solr_conf中启用它吗?

<searchComponent name="stats"     class="solr.StatsComponent" />

1 个答案:

答案 0 :(得分:1)

这可能取决于在模式中如何定义fieldType。

tint曾经是TrieIntField实现的首选名称,该实现支持排序,统计信息计算等,而无需启用docValues,因此可能是您的字段类型实现了另一个类(PointField类),实际上确实依靠docValues实现相同的目标。

例如,它可能是IntPointField

  

整数字段(32位带符号整数)。此类编码int值   使用基于“维度点”的数据结构,   有效搜索特定值或值范围。对于   单值字段docValues =“ true”必须用于启用排序。

好吧,实际上它应该是IntPointField ,因为从Solr 7.0开始,Trie字段deprecated支持Point字段:

  

TrieField使用类型参数来定义要使用的Trie *字段的特定类。请改用适当的“点字段”类型:

     

T̶r̶i̶e̶D̶a̶t̶e̶F̶i̶e̶l̶d̶> DatePointField
  ̶T̶r̶i̶e̶D̶o̶u̶b̶l̶e̶F̶i̶e̶l̶d̶> DoublePointField
  T̶r̶i̶e̶F̶l̶o̶a̶t̶F̶i̶e̶l̶d̶> FloatPointField
  T̶r̶i̶e̶I̶n̶t̶F̶i̶e̶l̶d̶> IntPointField
  T̶r̶i̶e̶L̶o̶n̶g̶F̶i̶e̶l̶d̶> LongPointField

现在,错误显示为“没有docValues不能在PointField上计算统计信息” ,所以:

  • price不是此处涉及的字段,因为其类型tint将引用(通常是引用)TrieIntField,而不是PointField。这意味着另一个不使用docValues的PointField负责该错误。
  • price是一个PointField,所以首先其类型应为pint或它所引用的fieldType的名称,但不能为tint(除非fieldType本身的命名错误),并且其次,它需要启用docValues来计算统计信息。

因此,在schema.xml中设置正确的field / fieldType定义,显式引用IntPointField类型,并启用docValues(向字段或字段类型定义中添加docValues="true")将有所帮助。例如:

<fieldType name="pint" class="solr.IntPointField" docValues="true"/>
<field name="price" type="pint" indexed="true" stored="true" required="false" />