複数の JOIN を AND 条件で組み合わせること

(The bot translated the original post https://lists.apache.org/thread/w4jvxtwzs2o739ngk3o0q36yy5hrlhx9 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは、皆さん。
私は Solr 9.3(VuFind と併用)を使っています。特定の著者(ファセットで選択)によって書かれた書籍の一覧を取得するために JOIN クエリを使いたいと考えています。
まず、JOIN を使わずに試してみてデータを用意するため、2つの準備ステップを行いました。
ステップ 1:
authority データベースをクエリし(4つのファセットを組み合わせて)著者一覧を取得します。
クエリ:
/solr/authority/select?fl=authority_str&fq=full_text_str_mv%3A"Matrika narozených"&fq=full_text_str_mv%3A"Matrika zemřelých"&fq=gender_facet%3A"žena"&fq=occupation_facet%3A"básníci"&indent=true&q.op=OR&q=*%3A*&useParams=&wt=json
fq
の内容(わかりやすく記載):
occupation_facet:"básníci"
gender_facet:"žena"
full_text_str_mv:"Matrika narozených"
full_text_str_mv:"Matrika zemřelých"
レスポンスの例:
"docs": [
{"authority_str":"jk01021170"},
{"authority_str":"jk01110447"},
{"authority_str":"jk01021755"},
{"authority_str":"jk01080703"},
{"authority_str":"jk01100238"},
{"authority_str":"jk01152591"}
]
ステップ 2:
ステップ1で得た著者IDリストを使って、biblio データベースをクエリし書籍一覧を取得します。
クエリ:
/solr/biblio/select?indent=true&q.op=OR&q=authority_search_str_mv%3A(jk01021170 jk01021755 jk01080703 jk01100238 jk01110447 jk01152591)&useParams=
レスポンスの numFound
は 1498 件。
結果を "jk01021170|jk01021755|...
で grep し、期待通りの結果が含まれていることを確認しました。
ステップ 3:
JOIN クエリを使ってステップ1+2を結合する。
クエリ:
/solr/biblio/select?
fq={!join fromIndex='authority' from='authority_str' to='authority_search_str_mv' v='occupation_facet:"básníci"'}
&fq={!join fromIndex='authority' from='authority_str' to='authority_search_str_mv' v='gender_facet:"žena"'}
&fq={!join fromIndex='authority' from='authority_str' to='authority_search_str_mv' v='full_text_str_mv:"Matrika narozených"'}
&fq={!join fromIndex='authority' from='authority_str' to='authority_search_str_mv' v='full_text_str_mv:"Matrika zemřelých"'}
&q=*:*&q.op=OR&indent=true&useParams=
このクエリのレスポンス numFound
は 1563 件 で、本来欲しい1498件以外に65件の余計な結果が含まれていました。
最初の10件中に本来の結果はわずか2件しか含まれていないことも気になります。
質問:
どうすれば、この不要な 65 件を除外できるでしょうか?
よろしくお願いします。
Josef
トピックへ返信するには、ログインが必要です。