Сортировка по текстовому полю в solr

Я использую solr 3.4 и хочу, чтобы результаты поиска solr сортировались по текстовому полю. Как я могу добиться сортировки в текстовом поле, как с естественным порядком int?

Есть ли способ преобразовать текстовое поле в int во время запроса?

Мое поле сортировки имеет строковый тип, и я хочу, чтобы оно вело себя как поле int при сортировке. Я не могу изменить тип поля, так как размер индекса слишком велик и не может быть переиндексирован.

Любая идея, как я могу достичь этого?


person Community    schedule 17.04.2013    source источник
comment
Пожалуйста, тоже приведите пример. Вы хотите, чтобы такие строки, как Ep 1, Ep 2, Ep 10, сортировались в естественном порядке?   -  person Jesvin Jose    schedule 23.04.2013
comment
Нет, у меня есть текстовое поле со значениями вроде 90 100 201 и т. д. я хочу, чтобы эти значения были отсортированы как int, а не как строка. случай, когда порядок сортировки будет разным в обоих случаях   -  person    schedule 24.04.2013


Ответы (2)


Не совсем уверен, но вы можете проверить функциональные запросы с такими функциями, как abs, или любыми математическими функциями, которые может преобразовать его в значения int и использовать для сортировки

e.g. abs(some_field) desc

В противном случае скопируйте поле в новое поле с типом int, которое потребует переиндексации.

Кроме того, сортировка плохо работает с многозначными и токенизированными текстовыми полями.

Документация. Сортировка может выполняться по «оценке» документа или по любому многозначному Поле ="false" indexed="true" при условии, что это поле либо не токенизировано (т. е. не имеет анализатора), либо использует анализатор, который создает только один термин (т. е. использует KeywordTokenizer)

person Jayendra    schedule 18.04.2013
comment
Этот ответ был очень полезным - person ; 23.04.2013
comment
Нет! abs нельзя использовать для типа strng. Solr повторно использует невзвешенное использование для сообщения об ошибке abs(str(имя поля))... бла-бла-бла. - person Scott Chu; 26.02.2014

Во время запроса это невозможно.

У вас должно быть дополнительное поле и копирует текстовое поле поверх нового целочисленного поля, а затем переиндексирует вашу базу данных. Используйте фильтр, чтобы убедиться, что преобразование будет работать.

person Francesco Frassinelli    schedule 31.10.2018