2012-01-24 1 views
0

내가 SOLR 3.4 그 자체가 그렇게 말 필드로 필드의 범위를 정의 할 수 있는지 찾고 있어요 :SOLR 범위 양동이 및 긴 URL

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

난 단순히 필드 이름을 전달할 수있는 이 각각에 대해 PriceLow 및 PriceHigh라고 말하십시오. 나는 최대 50 개의 범위와 면밀한 조사를 위해 패싯 카운트를 리턴해야하는데, HTTP Get을 통해 길이를 전달하는 것으로 제한 될 것입니다. 마찬가지로 내가 통과하는 쿼리는 매우 길다.

덕분에 벤

+0

죄송 합니다만 문의하신 내용을 이해하지 못해서 명확히 할 수 있습니까? – javanna

+0

기본적으로 색인을 생성 할 때 정보를 선전 할 수있는 방법은 무엇입니까? – Ben

답변

1

나는 here 설명처럼 당신이 뭔가를 찾고 생각합니다. 패싯 범위가 많은 경우 정규식을 사용하여 인덱싱하는 동안 범위를 다른 필드의 일반 문자열로 미리 계산할 수 있습니다.

<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> 

그런 다음 직접면 새 복사본 필드에 간단한 필드 패싯을 할 수 있습니다 : 당신은 기본적으로 모든 패턴이 다른 범위있는 다음 fieldType의 copyField을 만들 수 있습니다.

이렇게 많은 범위의 긴 URL을 사용하지 않아도되지만 범위를 변경해야하는 경우 모든 색인을 다시 색인해야합니다.