0

私は一連の製品を持っています。製品ごとに、solr ファセット検索を作成する必要があります。

次の「製品」の例:

Computer
TV
MP3-Player

ファセット検索を使用して、すべての製品がフィールド PRODUCT にどのくらいの頻度で存在するかを判断するのが好きです。次の結果で

Comupter (3)
  -apple
  -ibm
  -dell
TV (5)
  -sony
  -toshiba
  [...]
MP3-player (10)
  -[...]

今、私はすべての単語/製品に対して1つのファセット検索を使用することでそれを実現しています. これは機能しますが、次のオプションを使用すると、結果が 400 ミリ秒で返されます。

'facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
 'facet.limit'=>200
'facet.mincount'=>4
 'fq' => 'PRODUCT:computer'    <- by iterating an array with PHP i change the product (computer,tv,...) on every iteration

残念ながら、実際には (上記の例のように) 3 つの製品はなく、関連する約 100 の製品があります。つまり、PHP スクリプトは 400 ミリ秒で 100 回の solr 検索を要求する必要があるため、スクリプトの実行に 40 秒かかり、これは長すぎます。「すべての」製品 (「fq=" なし) の無制限/無制限のファセット検索を実行することはできません。これは、何千もの製品があり、すべての情報だけを必要としないためです。

たとえば、これらの複数のsolrリクエストを1つにマージするなど、パフォーマンスを向上させる方法はありますか?

ありがとうございました!

4

2 に答える 2

0

よくわかりませんでしたが、クエリに関連する製品に対して1つのフィルタークエリを作成することはできません。

facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
'facet.limit'=>200
'facet.mincount'=>4
'fq' => 'PRODUCT:(computer OR tv OR mp3-player)'

そして、返された結果に対していくつかの処理を行いますか?

于 2011-06-17T11:42:22.407 に答える
0

通常、ファセット時に特定の型の値でフィルター処理することは望ましくありません。ファセットの背後にある考え方は、ファセット フィールド内のすべての値 (元のクエリに一致するすべてのアイテム) に対して「グループ化」と「カウント」を行うことです。

fq-parameter を単純に削除すると、少なくとも 4 回発生する PRODUCT-field のすべての値のリストと、それらの各値のカウントが得られることがわかります。

于 2011-06-17T11:46:53.607 に答える