2

ある種のバージョニングを備えた Solr スキーマがあります。ID にはバージョン番号が含まれているため、既存のドキュメントは新しいものとしてそのまま残り、インデックスが作成されます。サンプル内容:

id = foo1
name = foo
version = 1
data = x

id = foo2
name = foo
version = 2
data = y

id = bar1
name = bar
version = 1
data = x

2 つの異なる検索シナリオがあります。すべてのバージョンを検索するか、最新のものだけを検索します。data1 つ目は些細なことですが、それぞれの最新バージョンのみをフィールドで検索するにはどうすればよいnameでしょうか。上記のサンプルでは、​​latest で "x" を検索し、"bar1" のみがヒットすることを期待しています。

http://wiki.apache.org/solr/FieldCollapsingを使用した解決策を期待していましたが、 group.field=nameSolrで「x」を検索すると、検索後にグループ化され、上記の 2 つの名前のバージョン 1 が得られます。フィルタークエリのように機能する必要があります。

4

1 に答える 1

2

フィールドの折りたたみが目的に役立つとは思わないでください。

いくつかのオプションを考えることができます-

  1. ドキュメントの一意の同じ ID を生成して、新しい現在のドキュメントを追加すると、古いドキュメントが上書きされ、ドキュメントのバージョンが常に 1 つだけになるようにします。
  2. ステータスが CURRENT であることを示すドキュメントの追加フィールドを維持できる場合。最新のドキュメントのみがフィールド値を持ち、ドキュメントの他のすべてのバージョンの値をリセットする必要があります。このようにして、フィルタ クエリで最新のドキュメントを簡単に除外したり、フィルタ クエリですべてのバージョンを検索したりできます。
于 2011-09-18T17:18:53.943 に答える