0

私が取り組んでいるアプリケーションは、Solrを使用してさまざまなストアのページや製品にインデックスを付けています。「異なる店舗の商品」とは、店舗Aまたは店舗Bで商品を購入できるが、店舗Cでは購入できないことを意味します。顧客が店舗Cのウェブサイトに接続して、利用できない商品を検索した場合このストアでは、検索結果に表示されないはずです。

スキーマに「タイプ」フィールドがあり、ドキュメントが「ページ」か「製品」かを判断できます。この検索制約があるので、このフィールドには「ページ」または「productB」のこの「productA」のような複合キーが含まれます。ご想像のとおり、AまたはBはストアのIDです。

DB内の各商品について、n回インデックスを作成します。ここで、nはこの商品を販売している利用可能な店舗の数です。

検索したいストアをフィルタリングするためにファセット検索を使用したかったのですが、問題が発生しています。

インデックス作成を開始し、検索に直面せずに「foobar」を検索しています。私はこのようなファセットのリストを取得します:

<lst name="facet_fields">
    <lst name="type">
        <int name="productA">10</int>
        <int>0</int>
</lst>

この数は、ストアAのインデックス作成が終了するまで、増え続けています(これは正常です)。次に、ストアBのインデックス作成を開始し、solrにクエリを実行するとこのような結果が得られます。

<lst name="facet_fields">
    <lst name="type">
        <int name="productA">303</int>
        <int name="productB">6</int>
        <int>0</int>
</lst>

しかし、しばらくすると、solrは怒って、この結果を送ってくれます。

<lst name="facet_fields">
    <lst name="type">
        <int name="productB">320</int>
</lst>

はい。ファセットカウントすら取得productAできず、検索することもできません。結果は0になります。

何が起こっているのか分かりますか?この種の問題にファセットを使用するのは間違っていますか?

4

1 に答える 1

2

おそらく、一意のキーでドキュメントを上書きしています。異なる店舗の製品が異なる固有のキーを持っていることを確認してください。これを行うには、ストアごとに一意のキー値にプレフィックスを追加します。

于 2011-09-01T15:39:41.533 に答える