2012-04-25 2 views
2

Я ищу способ построить «обратные» интервальные запросы, то есть вместо того, чтобы определять полеSolr запрос, если значение соответствует один из нескольких интервалов

<field name="myfield" type="int" ...> 

, а затем с указанием интервала в запросе

myfield:[x TO y] 

Я скорее хочу, чтобы определить «интервала поле» в моей схеме

<field name="myfield" type="<whatever_fits_here>" multivalued="true" ...> 

так, что в этом поле значений т РАВО быть, например,

[100 TO 250], [460 TO 800], [970 TO 1040] 

Запрос будет содержать точное значение этого поля, так что запись будет соответствовать, если значение содержится в любой из его интервалов.

Примечание: сбор всех возможных значений из интервалов в многозначное поле здесь не является вариантом, это приведет к тому, что во многих случаях будет достигнуто около 10000 значений на запись (т.е. верхняя и нижняя границы интервалов отличаются тем, что номер).

+0

В чем вопрос? – jpountz

+0

Как определить поле, которое позволит мне достичь этого? Или, если нет соответствующего типа поля: как я могу привязывать интервалы к записи, чтобы запросы, описанные мной, работали? –

ответ

0

Я бы сделал это на UpdateProcessor, вы можете узнать значение этого поля и задать другое поле2 в 'range1', 'range2' и т. Д. В зависимости от того, где он принадлежит, тогда вы запрашиваете поле2.

+0

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

+0

, то я до сих пор не совсем понимаю вопрос, как выглядят ваши запросы? – Persimmonium

+0

Основываясь на моих примерах выше, запрос будет, например, 'MyField: 980'. Затем запись, которая, например, [800 TO 1200], поскольку значение myfield будет соответствовать, так как 980 находится внутри этого интервала. –

3

Полиные поля, такие как described in this blog post, должны быть тем, что вы ищете.

Она включает в себя определение схемы для типа location(Double,Double):

<fieldType name=”location” class=”solr.PointType” dimension=”2″ subFieldType=”double”/> 
<field name=”store” type=”location” indexed=”true” stored=”true”/> 

И запрос:

q=store:[44,-90 TO 46,-94] 

Таким образом, вы можете создать диапазон (Int, Int) тип поля и многозначное поле, которое его использует.

q=myfield:[75,* TO *,75] //a range that includes 75 
q=myfield:[50,* TO *,100] //a range that includes 50-100 

Отказ от ответственности: Я никогда не использовал поли поля сам. Я не знаю, как эти запросы работают на многозначном поле.

+0

Спасибо. Конечно, выглядит очень интересно, хотя это может быть и не то, что я ищу. :) –