solr stats错误:没有docValues,无法计算点域上的统计信息
我正在尝试使用solr 7.x获取搜索的最小/最大价格,以便按照以下教程填充最小/最大价格过滤器: 字段:solr stats错误:没有docValues,无法计算点域上的统计信息,solr,Solr,我正在尝试使用solr 7.x获取搜索的最小/最大价格,以便按照以下教程填充最小/最大价格过滤器: 字段: <field name="price" type="tint" indexed="true" stored="true" required="false" /> Solr返回以下错误: msg:没有docValues,无法计算PointField上的统计信息, 代码:400 原因可能是什么?我必须在solr_conf中启用它吗 <searchComponent nam
<field name="price" type="tint" indexed="true" stored="true" required="false" />
Solr返回以下错误:
msg:没有docValues,无法计算PointField上的统计信息,
代码:400
原因可能是什么?我必须在solr_conf中启用它吗
<searchComponent name="stats" class="solr.StatsComponent" />
这可能取决于在模式中如何定义字段类型 tint曾经是TrieIntField实现的首选名称,它支持排序、统计计算等,而不必启用docValues,因此您的字段类型可能实现了另一个类a PointField类,该类实际上依赖docValues来实现相同的目标 例如,它可能是一个IntPointField: 整数字段32位有符号整数。这个类对int值进行编码 使用基于维度点的数据结构,允许 高效搜索特定值或值范围。对于 必须使用单值字段docValues=true来启用排序 事实上,它应该是一个IntPointField,因为从Solr 7.0开始,Trie字段支持点字段: TrieField采用类型参数来定义要使用的Trie*字段的特定类。请改用适当的点字段类型: T,r,i,e,D,a,T,e,F,i,e,l,D, > DatePointField "T,T,r,i,e,D,o,u,b,l,e,F,i,e,l,D" > 双点场 T,r,i,e,F,l,o,a,T,F,i,e,l,d, > 浮点字段 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, > 长角田 现在,错误表明没有docValues无法计算PointField上的统计信息,因此: 这里涉及的字段不是price,因为其类型tint通常指的是TrieIntField,而不是PointField。这意味着另一个不使用docValues的PointField要对错误负责。 price是一个PointField,因此首先它的类型应该是pint或fieldType所指的任何名称,但不是tint,除非fieldType本身被错误命名,其次它需要启用docValues来计算统计数据。 因此,在schema.xml中设置适当的字段/字段类型定义,显式引用IntPointField类型,并启用docValues将docValues=true添加到字段或字段类型定义中应该会有所帮助。例如:
<fieldType name="pint" class="solr.IntPointField" docValues="true"/>
<field name="price" type="pint" indexed="true" stored="true" required="false" />
非常感谢。我突然从一个旧的conf文件中发布了错误的字段定义。类型为点字段,但缺少docValues=true。已更改、重新启动solr、重新编制索引。作品现在还有一个问题,我是否需要启用:?正如我所做的那样,将:stats=true手动添加到查询中。我在PHP中发布:$this->query->addStatsField'price';这将导致一个没有stats=true的查询。如果有包含stats的显式组件列表定义,则只需在requestHandler中添加“stats”组件。您还可以在PHP中使用$SolrQuery->setstats$标志在查询时启用/禁用它。非常感谢您的帮助,情况就是这样。我现在启用了查询时间,并成功地集成到我的应用程序中。祝你有美好的一天!