3

編集

自分の必要性をうまく説明できなかったらごめんなさい。もっと良い説明をしようと思います。

私が持っているもの:フィールドX、別のフィールドY、および不要な別のフィールドZを持つ何百万ものドキュメント(したがって、一部のドキュメントでは空になり、他のドキュメントでは空にならない可能性があります)。

私がやりたいこと:フィールドXが何かに等しいドキュメントを検索し、フィールドZでグループ化します(フィールドZの値ごとに1つのドキュメントのみが返されるようにします)が、フィールドZが空のドキュメントを含める必要があります結果(すべて)で結果を並べ替え、フィールドYで並べ替えます(したがって、リクエストを2つのリクエストに分けることはできません)。

これがより明確になることを願っています。

4

2 に答える 2

1

これは私の問題について私が見つけることができる最良の答えです(solrメーリングリストのユーザーから):

アイデアは、フィールドZのコピーフィールドを使用し、データのインデックスを作成するときに、フィールドZが空の場合、コピーフィールドに一意の値を生成することです。また、グループ化するときは、フィールドZの代わりにコピーフィールドを使用します(フィールドZがグループ化にのみ必要な場合は、コピーフィールドなしで単独で使用できます)。

于 2013-02-25T14:03:37.863 に答える
0

で使用group.querygroup.mainてそれを実現できます。

たとえば、以下のクエリは、価格が0から10のすべてのドキュメントをフェッチし、人気別に結果をグループ化します。設定group.query=popularity:[* TO *]により、人気が確実に存在します。作成すると、 group.querygroup.main=trueの結果がメインの結果になります。

select?q=price:[0%20TO%20 10]&wt=json&group=true&group.field=popularity&group.query=popularity:[*%20TO%20*]&group.main=true

https://wiki.apache.org/solr/FieldCollapsingを参照してください

更新:上記が機能しないようです。したがって、上記の回答を削除して新しい回答を与えるのではなく、回答を編集することをお勧めします:-)。

このような2つのクエリを実行できませんか?

「フィールドXが何かに等しいドキュメントを検索し、フィールドZでグループ化します(フィールドZの値ごとに1つのドキュメントのみが返されるようにします)」

q=X:1&group=true&group.field=Z

「フィールドZが空のドキュメントを結果(すべて)に含め、フィールドYで結果を並べ替えたい」

q=(X:1 AND -Z:[* TO *])&rows=SOME_LARGE_NUMBER&sort=Y asc
于 2013-02-22T15:28:17.640 に答える