SOLR を使用してデータ分析を行っていますが、大きな価値をもたらす可能性のある 1 つの部分に行き詰まっています。
範囲である多数の数値フィールドを持つ solr コレクションがあります。次に例を示します。
pr_high_max = 10.35
pr_high_min = 8.15
pr_med_max = 12.55
pr_med_min = 10.40
各最小/最大の組み合わせは価格帯を提供し、高/中の部分はその範囲で現在のグループ内のアイテムの数によって導き出されます。いくつかのファンキーな数学については触れません.
商品価格を使用して solr にクエリを実行し、その価格が範囲の 1 つであるドキュメントを取得する必要があります。高いフィールドが med フィールドよりも優先されるように、それに重みを割り当てることができる必要があります。これは基本的に逆 RANGE 検索です。
私が照会している他のフィールドがあるため、これは重み付けに含める必要があります。これも fq にはできません。アイテムがこの基準に一致しない場合、一致する可能性のある他のフィールドがあるためです。
これまでのところ、この関数クエリを組み立てることができました。
prboost:sum(
if(and(query({!edismax v='pr_high_max:[8 TO *]' }),query({!edismax v='pr_high_min:[* TO 8]'})),5,0),
if(and(query({!edismax v='pr_med_max:[8 TO *]' }),query({!edismax v='pr_med_min:[* TO 8]'})),3,0),
if(and(query({!edismax v='pr_low_max:[8 TO *]' }),query({!edismax v='pr_low_min:[* TO 8]'})),1,0),
)
8 は渡す価格です。基本的に、これは価格が範囲内にあるかどうかを確認し、範囲内にある場合は値を返します。高値は 5、中値は 3、安値は 1 です。 . 理想的には、これを通常の重み付けに含めたいのですが、これをサブクエリとして追加できませんでした。さらに、それをブーストしようとすると、「Infinite Recursion detected parsing query 'pr_high_max:[8 TO *]'」が返されます
誰かが前にこのようなことに遭遇したことがありますか? 何か案は?
また、進行中のデータを制御できるので、解決が容易になる場合は、データを簡単にマッサージして別の方法で範囲を表すことができます。
前もって感謝します