Solr эквивалент SQL BETWEEN для числовых полей - PullRequest
3 голосов
/ 04 октября 2011

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

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

<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 ~ 4,500; большинство других запросов значительно ниже 100.

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

1 Ответ

3 голосов
/ 04 октября 2011

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

Так что я думаю, что-то вроде следующего должно работать ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...