2

Author フィールドを持つ書籍のリストを想定します。Author フィールドを 1 つのファセットとして、値 "Stephen King" と "Richard Bachman" を同じものとして扱うにはどうすればよいでしょうか? したがって、これらの結果は次のようになります。

  • ヘミングウェイ:8
  • スティーブン・キング:10
  • エドガー・アラン・ポー:20
  • リチャード・バックマン:5

次のように表示されます。

  • ヘミングウェイ:8
  • スティーブン・キング:15
  • エドガー・アラン・ポー:20

ファセットのタイトルが「Stephen King」、「Richard Bachman」などであるかどうかは重要ではないことに注意してください。それらが一緒にファセットされていることだけが重要です。

クエリ時のソリューションが必要であることに注意してください。残念ながら、このインデックスのスキーマを変更することはできません。これは汎用インデックスであり、すべてのユーザーが独自のスキーマを「微調整」できるとしたら、手に負えなくなります。

4

3 に答える 3

3

これは、ファセット フィールドとファセット クエリを組み合わせることで実現できます。

これらをクエリに追加します。

&facet=true
&facet.field=author
&facet.query=author:("Hemmingway" OR "Stephen King")

返されるファセットは次のようになります。

facet_counts: {
    facet_queries: {
       "author:("Hemmingway" OR "Stephen King")" : 18
    }
    facet_fields: {
         author: {
            "Hemmingway"      : 8,
            "Stephen King"    : 10,
            "Edgar Allan Poe" : 20,
            "Richard Bachman" : 5
        }
    }
}

ファセット クエリに「エイリアス」を追加することもできます。これを変える

&facet.query=author:("Hemmingway" OR "Stephen King")

&facet.query={!ex=dt key="Hemmingway"}author:("Hemmingway" OR "Stephen King")

ファセット クエリの出力は次のようになります。

    facet_queries: {
       "Hemmingway" : 18
    }

Solr から両方の出力フィールド (facet_queries と facet_fields) をマージできるかどうかはわかりませんが、どのクライアントからでもマージできるはずです。

于 2013-04-05T11:11:38.027 に答える
1

文字列を変換する分析チェーンが必要です。SynonymFilterは、インデックス作成時とクエリ時に適用すれば、これを実行すると思います。sysnonymマッピングが一方向にのみ行われることを確認する必要があります。

于 2013-03-15T13:52:47.777 に答える
1

ファセットのリスト全体は必要なく、上位 n 人の著者だけが必要だと思います。この場合は、後処理ステップで行うことができます。

シノニムを知っていて、わずかに高い facet.limit(2*n としましょう) を設定した場合は、結果セットからシノニムを除外するだけで済みます。最終的に n 個未満の結果になった場合は、前の手順を繰り返します (最悪の場合、シノニムの数に応じて、もう 1 回要求を行う必要があります)。

例では...&facet=true&facet.field=author&facet.limit=100&facet.mincount=1

これは Solr とは何の関係もありませんが、すべての制限を考慮すると、単純に削減できる可能性があります。

よろしくお願いします、

于 2013-04-10T09:49:48.837 に答える