2012-01-24 25 views
0

私はSolrの3.4で、それ自体がそう言うフィールドとしてフィールドの範囲を定義することが可能であるかどうかを確認するために探しています:Solrの範囲バケツと長いURL

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

私は単にフィールド名を渡すことができたのこれらのそれぞれについてPriceLowとPriceHighと言う。私は最大50の範囲とファインメントを返す必要があります私は長さHTTPの経由でそれらを渡すことによって制限されることを懸念します。私が渡しているクエリは非常に長いので、

おかげ ベン

+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を使用することは避けられますが、範囲を変更する必要がある場合はすべてを再インデックスする必要があります。