Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
solr stats错误:没有docValues,无法计算点域上的统计信息_Solr - Fatal编程技术网

solr stats错误:没有docValues,无法计算点域上的统计信息

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

我正在尝试使用solr 7.x获取搜索的最小/最大价格,以便按照以下教程填充最小/最大价格过滤器:

字段:

<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$标志在查询时启用/禁用它。非常感谢您的帮助,情况就是这样。我现在启用了查询时间,并成功地集成到我的应用程序中。祝你有美好的一天!