2012-04-09 2 views
4

私のアプリケーションでファセットを使用してソル検索を使用しています。私のユースケースは、datadir内のインデックスファイルが変化し続けるような方法です。ソールでファセット数0を取得

問題は、特定のフィールドに基づいて判断するときです。私はインデックスから値を取得します。これは、以前にデータディレクトリにあった場所(現在は存在しません)です。ただし、値は0で返されます。以前のインデックスの値が永続化され、完全に新しい検索で返される場所はわかりません。

カウント0のファセットを単純にスキップすることはできますが、スケーラビリティを大幅に悪化させる可能性があることを理解しています。以前の検索者のファセットを含まないポインタはありますか?

[編集1]:現在使用している回避策は、URLにfacet.mincount=1を追加することです。しかし、まだ、私はこれが私のパフォーマンス以上に食べることができると思います。

+2

変更が確定しましたか?そのため、以前の検索者からの検索結果が表示されている可能性があります。とにかく、 'facet.mincount = n'を使用することは回避策ではありませんが、n未満のファセット数を除外する正しい方法です。^ –

+1

^確かに。 を送信すると、すべての検索ユーザーが再開されます。ファセットはビットパフォーマンスのエターですが、分を使用してもパフォーマンスには何の影響もありません。 –

+1

+1の場合、facet.mincount = 1、私の場合に役立ちました。 – cili

答えて

0

私はコメントのオプションを見つけることができませんでした&私は投票に十分な評判を持っていません! 私はまったく同じ問題を抱えています。 我々はsolr 4.2で原子アップデートを使用しています。私はここにいくつかの説明を見つけ

http://collab.sakaiproject.org/pipermail/oae-dev/2011-November/000693.html

抜粋:

効率的に(タグのような)複数値フィールドのファセットを処理するに

は、Solrの はあなたと思う「非反転インデックス」(構築します "index"と呼ばれていますが、さらに混乱していると思います)。 内部のドキュメントIDが、その中に含まれる用語のリストにマップされています。このデータ構造から ファセットを計算するには、 文書を結果セット内に移動し、 の非反転インデックスに含まれる用語を検索し、それらをすべての文書の集計に追加する必要があります。

ここでは、私たちが見ているゼロの数字がになっています。 文書の5%以上に表示される用語については、Solrはそれらを非反転インデックスに含めません( はそれらをメモリに保存するのに役立ちます)。 はこれらの用語のカウントを取得しますLuceneインデックスに対して通常のクエリを使用しています。 「共通」の用語は 結果セットに固有なものではないため、結果セットには必ずこれらの用語のすべてが含まれているとは限りません。バックカウントはゼロになります。

古いインデックス値ではなく、5%を超えるドキュメントに存在する用語のみである可能性がありますか?

1

私はfacet.mincount=nが回避策ではないと考えています。これは、負でないファセットカウントだけを取得するために使用してください。

solrQuery.setQuery("*:*"); 
solrQuery.addFacetField("foobar"); 
solrQuery.setFacetMinCount(1); 
関連する問題