It's hard to get to the core problem. Here's just a blind guess: souldn't
theses filters intersected before join avoiding cross-match?
ie
fq={!join fromIndex='authority' from='authority_str'
to='authority_search_str_mv'}+occupation_facet:"básníci"
+gender_facet:"žena"+full_text_str_mv:"Matrika narozených"
+full_text_str_mv:"Matrika zemřelých"

On Wed, Mar 12, 2025 at 12:46 PM Josef Svoboda
<josef.svob...@ucl.cas.cz.invalid> wrote:

> Hi all,
>
> I am using solr 9.3 (with VuFind). I want to use JOIN query to get a list
> of books written by certain authors (selected by facets).
> First, I do two preparatory steps to try this without JOIN and have some
> data to test.
>
> Step 1: Query authority DB (combining 4 facets) to get list of authors.
>
> Query:
> /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
>
>
> For convenience, I copy the contents of fq boxes:
> occupation_facet:"básníci"
> gender_facet:"žena"
> full_text_str_mv:"Matrika narozených"
> full_text_str_mv:"Matrika zemřelých"
>
> Response:
> "responseHeader":{
> "status":0,
> "QTime":0,
> "params":{
> "q":"*:*",
> "indent":"true",
> "fl":"authority_str",
> "q.op":"OR",
> "fq":["occupation_facet:\"básníci\"","gender_facet:\"žena\"","full_text_str_mv:\"Matrika
> narozených\"","full_text_str_mv:\"Matrika zemřelých\""],
> "wt":"json",
> "useParams":"",
> "_":"1741770044834"
> }
> },
> "response":{
> "numFound":6,
> "start":0,
> "numFoundExact":true,
> "docs":[{
> "authority_str":"jk01021170"
> },{
> "authority_str":"jk01110447"
> },{
> "authority_str":"jk01021755"
> },{
> "authority_str":"jk01080703"
> },{
> "authority_str":"jk01100238"
> },{
> "authority_str":"jk01152591"
> }]
> }
> }
>
> Step 2: Query biblio DB (using list of authors we got in step 1) to get
> list of books.
> Query:
> /solr/biblio/select?indent=true&q.op=OR&q=authority_search_str_mv%3A(jk01021170
> jk01021755 jk01080703 jk01100238 jk01110447 jk01152591)&useParams=
>
> Response:
> {
> "responseHeader":{
> "status":0,
> "QTime":1,
> "params":{
> "q":"authority_search_str_mv:(jk01021170 jk01021755 jk01080703 jk01100238
> jk01110447 jk01152591)",
> "indent":"true",
> "fl":"fullrecord",
> "q.op":"OR",
> "rows":"10000",
> "useParams":"",
> "_":"1741770215216"
> }
> },
> "response":{
> "numFound":1498,
> "start":0,
> "numFoundExact":true,
> "docs":[...]
> }
> By grepping result for
> "jk01021170|jk01021755|jk01080703|jk01100238|jk01110447|jk01152591", I
> checked that data contain the results I wanted.
>
> Step 3: Use join query to combine steps 1 + 2.
> Query:
> solr/biblio/select?fq={!join fromIndex%3D'authority'
> from%3D'authority_str' to%3D'authority_search_str_mv'
> v%3D'full_text_str_mv%3A"Matrika narozených"'}&fq={!join
> fromIndex%3D'authority' from%3D'authority_str'
> to%3D'authority_search_str_mv' v%3D'full_text_str_mv%3A"Matrika
> zemřelých"'}&fq={!join fromIndex%3D'authority' from%3D'authority_str'
> to%3D'authority_search_str_mv' v%3D'gender_facet%3A"žena"'}&fq={!join
> fromIndex%3D'authority' from%3D'authority_str'
> to%3D'authority_search_str_mv'
> v%3D'occupation_facet%3A"básníci"'}&indent=true&q.op=OR&q=*%3A*&useParams=
>
> For convenience, I copy the contents of fq boxes:
> {!join fromIndex='authority' from='authority_str'
> to='authority_search_str_mv' v='occupation_facet:"básníci"'}
> {!join fromIndex='authority' from='authority_str'
> to='authority_search_str_mv' v='gender_facet:"žena"'}
> {!join fromIndex='authority' from='authority_str'
> to='authority_search_str_mv' v='full_text_str_mv:"Matrika narozených"'}
> {!join fromIndex='authority' from='authority_str'
> to='authority_search_str_mv' v='full_text_str_mv:"Matrika zemřelých"'}
>
> Response:
> {
> "responseHeader":{
> "status":0,
> "QTime":0,
> "params":{
> "q":"*:*",
> "indent":"true",
> "q.op":"OR",
> "fq":["{!join fromIndex='authority' from='authority_str'
> to='authority_search_str_mv' v='occupation_facet:\"básníci\"'}","{!join
> fromIndex='authority' from='authority_str' to='authority_search_str_mv'
> v='gender_facet:\"žena\"'}","{!join fromIndex='authority'
> from='authority_str' to='authority_search_str_mv'
> v='full_text_str_mv:\"Matrika narozených\"'}","{!join fromIndex='authority'
> from='authority_str' to='authority_search_str_mv'
> v='full_text_str_mv:\"Matrika zemřelých\"'}"],
> "rows":"0",
> "useParams":"",
> "_":"1741770215216"
> }
> },
> "response":{
> "numFound":1563,
> "start":0,
> "numFoundExact":true,
> "docs":[...]
> }
> }
>
> By grepping result for
> "jk01021170|jk01021755|jk01080703|jk01100238|jk01110447|jk01152591", I
> checked that data contain the 1498 results I wanted, but it also contains
> 65 unwanted results.
>
> (What is perhaps interesting that only 2 of the wanted results are among
> the first 10 results.)
>
> What should I do get rid of these unwanted results?
>
> Thanks for any help,
> Josef
>
>

-- 
Sincerely yours
Mikhail Khludnev

Reply via email to