0

別々のスキーマを持つ複数のSolrインスタンスがあります。

並べ替えられた順序で複数値フィールドを受け取る必要があります。たとえば、train_station、airport、city_districtなどのタイプで受け取ります。

q=köln&sort=query({!v="type:(airport OR train_station)"}) desc

train_stationタイプの前に空港タイプのドキュメントを見たいのですが。今のところ、私は常にtrain_stationタイプを一番上に表示しています。

クエリはどのように書くべきですか?

4

4 に答える 4

6

train_stationIDFのためにトップにsが表示されます。

それを修正するための簡単なハックは、範囲クエリ(一定のスコアを持つという利点があります)とクエリブーストを使用することですq=köln&sort=query({!v="type:([airport TO airport]^3 OR [train_station TO train_station]^2)"}) desc

このようにairport、タイプフィールドにあるドキュメントのスコアは3にtrain_stationなり、タイプフィールドにあるドキュメントのスコアは2になりairporttrain_stationフィールドタイプにあるドキュメントのスコアは2 + 3 =5になります(乗法定数に)。

これを行うためのより洗練された(そして効果的な)方法は、カスタムクエリパーサー(または関数クエリ)を作成することです。

于 2012-02-29T23:31:34.683 に答える
1

関数は、ドキュメントごとに1つの値を返す場合にのみ並べ替えることができます。multiValuedフィールドまたはトークン化されたフィールドでソートすることはできません。フィールドに「airport」が含まれている場合は「airport」を返し(「trainstation」が含まれている場合でも)、「trainstation」が含まれているが「airport」が含まれていない場合は「trainstation」を返す関数が必要なようです。その上で。

別のオプションは、インデックス時にこれを処理することです。「airport_train_station_sort」というフィールドを追加します。このフィールドには、「airport」が含まれている場合は1、「train station」が含まれているが空港が含まれていない場合は2、どちらも含まれていない場合は3が返されます。次に、そのフィールドで並べ替えるだけです。

于 2012-02-29T17:21:04.430 に答える
1

SOLR内でこの問題を解決することはできません。ドキュメントを確認してください。SOLRは複数値フィールドをソートしません。古いバージョンのSOLRでは試してみることができますが、結果は未定義で予測できませんでした。

スキーマを変更して、この並べ替えデータを単一値のインデックス付きフィールドに配置するか、最初に空港、次に市区町村、次に駅の順にいくつかのクエリを実行する必要があります。

于 2012-03-01T07:19:36.333 に答える
0

フィールド自体の中でアイテムを並べ替えるには、必要な順序でアイテムにインデックスを付けるか、後処理を行う必要があります。Solrのソートでは、ドキュメントのみがソートされます。

于 2012-02-29T17:16:21.267 に答える