简体   繁体   中英

Solr schema for range values

I have created following kind of schema in SOLR for indexing "Age High" and "Age Low" fields

<field name="age"  type="age-levels-facet" multiValued="true" indexed="true"  stored="true" />

<fieldtype name="age-levels-facet" class="solr.TextField">
          <analyzer>
            <tokenizer class="solr.PatternTokenizerFactory" pattern=";"/>
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([0-2]))?$" replacement="Birth-2" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([3-5]))?$" replacement="3-5" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([6-8]))?$" replacement="6-8" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^(([9]|1[0-2]))?$" replacement="9-12" replace="all" />
            <filter class="solr.PatternReplaceFilterFactory" pattern="^((1[3-9]|[2-9][0-9]))?$" replacement="13+" replace="all" />
          </analyzer>
        </fieldtype>

So if, I pass "age=4-12" it will return me result as follow.

Birth-2 (0)
3-5 (1)
6-8 (0)
9-12 (1)
13+(0)

Which is correct as per I have created schema. But not correct logically. eg for user with age group of 4-12, the result would be

Birth-2 (0)
3-5 (1)
6-8 (1)
9-12 (1)
13+(0)

Anyone have any idea, how I can achieve this, using solr????

Why do you need to bake these in? Just use Solr Facet by Range functionality or Facet by Query . Then, you can just store your age as a number.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM