Solr эквивалент SQL BETWEEN для числовых полей

#performance #solr

#Производительность #solr

Вопрос:

Надеюсь, что некоторые указатели ускорят некоторые (очень) медленные запросы solr в версии 3.4.0.

У меня есть индекс около 6 миллионов документов. Каждый документ довольно маленький и содержит два solr.TrieDoubleField s; «начало» и «конец».

 <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
----
<field name="start" type="double" indexed="true" stored="false" />
<field name="end" type="double" indexed="true" stored="false" />
  

При запросе мне нужно выполнить SQL-эквивалент:

 WHERE @input BETWEEN Start AND End
  

Для этого я пишу свой запрос как:

 start:[* TO @input] AND end:[@input TO *]
  

Запрос выполняется успешно, возвращая правильный документ, но с QTime ~ 4500; большинство других запросов значительно ниже 100.

Что можно изменить для повышения производительности?

Ответ №1:

Я считаю, что вам следует попробовать анализатор запросов диапазона функций (frange) в Solr. Пожалуйста, ознакомьтесь с вводным сообщением в блоге — Диапазоны над функциями в Solr 1.4 для получения более подробной информации о том, как использовать анализатор запросов диапазона функций. (Обратите внимание, что это также должно применяться ко всем версиям Solr выше 1.4)

Поэтому я думаю, что должно сработать что-то вроде следующего…

 `?q=*:*amp;fq={!frange l=0 u=<@input>}start
    amp;fq{!frange l=<@input> u=<number larger than greatest value>}end`
  

Я не уверен, можете ли вы использовать подстановочные знаки для верхней и нижней границ, вероятно, нет…

Комментарии:

1. Спасибо! Я пробовал frange прошлой ночью (вместе с filterquery) без особой удачи, но ваш запрос выполняется достаточно быстро (около 200 мс против 4500 для всех других точных запросов0