Почему запрос узла solr дает неверный номер версии документа? - PullRequest
0 голосов
/ 03 марта 2019

Я использую Solr 7.6.При выполнении поискового запроса Solr выдает неправильное поле version документа, но все остальные поля являются правильными.

В панели мониторинга Solr запрос дает следующий результат:

{
        "id":"518fce46-3617-4380-aaf6-8f6d36e08e6a",
        "type":"tag",
        "count":1,
        "_version_":1626999925241806848
}

Принимая во внимание, что функция поиска узла solr дает:

{
         "id": "518fce46-3617-4380-aaf6-8f6d36e08e6a",
         "type": "tag",
         "count": 1,
         "_version_": 1626999925241806800
}

1 Ответ

0 голосов
/ 04 марта 2019

Первоначальное предположение состоит в том, что модуль solr-node возвращает значение в виде двойного (а не в виде строки), а точность двойного не достаточно хороша для точного представления значения 1626999925241806848.

Мы можем подтвердить это непосредственно в консоли нашего браузера:

-> 1626999925241806848
<- 1626999925241806800

, т. Е. Если мы введем числовое значение 1626999925241806848, оно будет представлено ближайшим числом с плавающей запятой, 1626999925241806800.

solr-node, вероятно, должен возвращать эти значения в виде строки, когда они превышают представимое значение для целых чисел.

Обновление : solr-node подробнее об этом вих обзорная страница :

Используйте json-bigint для правильной обработки чисел, слишком больших для Javascript Number, таких как значения полей * l и _version.По умолчанию библиотека json-bigint не используется, поскольку разница в производительности по сравнению с нативной библиотекой JSON слишком велика для «большого» фрагмента JSON (https://github.com/lbdremy/solr-node-client/issues/114#issuecomment-54165595),, но вы хотите включить его, если используете доступную функцию Optimistic Concurrenyв Solr 4.x вместе с функциями RealTime Get и Atomic Updates, поскольку они используют поле version . Чтобы включить его, выполните var client = solr.createClient({ bigint : true}) или непосредственно на экземпляре клиента client.options.bigint = true.

...