ошибка статистики статистики: невозможно вычислить статистику по PointField без значений docValues - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь получить минимальную / максимальную цену поиска с помощью 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": "Невозможно рассчитать статистику для PointField без docValues"," code ": 400

В чем может быть причина этого, и нужно ли мне включать это в solr_conf?

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

1 Ответ

1 голос
/ 17 марта 2019

Это может зависеть от того, как fieldType определен в вашей схеме.

tint раньше использовалось как предпочтительное имя для TrieIntField реализаций, которые поддерживают сортировку, вычисление статистики и т. Д. Без необходимости включения docValues, так что тип вашего поля может реализовывать другой класс (класс PointField) который на самом деле полагается на docValues ​​для достижения тех же целей.

Например, это может быть IntPointField:

Целочисленное поле (32-разрядное целое число со знаком).Этот класс кодирует значения int с использованием структуры данных на основе «размерных точек», которая обеспечивает очень эффективный поиск определенных значений или диапазонов значений.Для однозначных полей для включения сортировки необходимо использовать docValues ​​= "true".

Ну, на самом деле это должно быть IntPointField, поскольку по состоянию на Solr7.0, поля Trie устарели в пользу полей Point:

TrieField принимает параметр типа, чтобы определить конкретный класс поля Trie * для использования.Используйте соответствующий тип точки поля вместо:

1025 * 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 1031

Теперь ошибка говорит «Невозможно рассчитать статистику для PointField без значений docValues» , поэтому либо:

  • price здесь не поле, так как его тип tint будет относиться (обычно относится) к TrieIntField, а не к PointField.Это означает, что другой PointField, не использующий docValues, ответственен за ошибку.
  • price - это PointField, поэтому сначала его тип должен быть pint или каким бы ни было имя fieldType, к которому он относится, но не tint (если только сам fieldType не назван неправильно), а во-вторых, ему нужноdocValues ​​включен для расчета статистики.

Итак, должно помочь определение правильного определения поля / fieldType в 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...