Solr Range Buckets и длинные URL-адреса - PullRequest
0 голосов
/ 24 января 2012

Я смотрю, можно ли в Solr 3.4 определить диапазон поля как самого поля, так сказать:

Price : [0-1000]
Price : [1001-*]

Чтобы я мог просто передать имя поля, скажем, в PriceLow и PriceHigh для каждого из них. Мне нужно вернуть количество фасетов до 50 диапазонов, и я обеспокоен тем, что я буду ограничен длиной, передавая их через HTTP Get. Поскольку запросы, которые я передаю, тоже очень длинные.

Спасибо Ben

1 Ответ

1 голос
/ 24 января 2012

Я думаю, вы ищете что-то вроде объясненного здесь . Если у вас много диапазонов фасетов, вы можете предварительно вычислить диапазоны в виде простых строк в другом поле во время индексации, играя с регулярным выражением. В основном вы можете создать copyField следующего fieldType, для которого каждый шаблон имеет свой диапазон:

<fieldtype name="priceclass" class="solr.TextField"> 
  <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^([0-9]{0,2})([\.,][0-9]{1,2})?$" replacement="0 - 99" replace="all" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(1[0-9][0-9]|2[0-4][0-9]|)([\.,][0-9]{1,2})?$" replacement="100 - 249" replace="all" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(2[5-9][0-9]|[3-4][0-9][0-9])([\.,][0-9]{1,2})?$" replacement="250 - 499" replace="all" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^([5-9][0-9][0-9])([\.,][0-9]{1,2})?$" replacement="500 - 999" replace="all" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^([0-9]{4,5})([\.,][0-9]{1,2})?$" replacement="999 -" replace="all" /> 
  </analyzer> 
</fieldtype> 

Затем вы можете напрямую фасетировать новое поле копирования, создавая простой фасет поля.

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

...