If it's worked partially, only debugger may answer what's wrong with the
particular query.

On Wed, Jun 29, 2022 at 10:51 AM Noah Torp-Smith <[email protected]>
wrote:

> Interestingly, I found that
>
> [child childFilter=$pidfilter limit=-1]&pidfilter=+instance.agency:900004
>
> also worked - I get the pid that is present at that library. It's when I
> restrict at both pid and instance level it does not seem to work.
>
>
> --
>
> Noah Torp-Smith ([email protected])
>
> ________________________________
> Fra: Noah Torp-Smith <[email protected]>
> Sendt: 29. juni 2022 09:26
> Til: [email protected] <[email protected]>
> Emne: Sv: using childFilter to restrict "child" docs by "grandchild"
> information
>
> [Du f?r ikke ofte mails fra [email protected]. F? mere at vide om,
> hvorfor dette er vigtigt, p? https://aka.ms/LearnAboutSenderIdentification
> ]
>
> (apologies if this is not the correct way to respond to a comment to my
> original post)
>
> Hello Mikhail - thanks for responding so quickly.
>
> Your suggestion does not seem to work for me. Using
>
> [child childFilter=$pidfilter limit=-1]&pidfilter=+pid.material_type:bog
>
> works, but
>
> [child childFilter=$pidfilter limit=-1]&pidfilter=+pid.material_type:bog +
> instance.agency:900004
>
> or even
>
> [child childFilter=$pidfilter limit=-1]&pidfilter=+pid.material_type:bog +
> instance.agency:*
>
> returns the top-level work document, but no child/pid documents (and I
> have verified that they do exist). Specifying an instance-level restriction
> seems to make all the pid-level documents vanish.
>
> Thanks,
>
> /Noah
>
>
> --
>
> Noah Torp-Smith ([email protected])
>
> ________________________________
> Fra: Mikhail Khludnev <[email protected]>
> Sendt: 29. juni 2022 08:32
> Til: [email protected] <[email protected]>
> Emne: Re: using childFilter to restrict "child" docs by "grandchild"
> information
>
> Hello, Noah.
> Could i be something like
> [child childFilter=$pidfilter limit=-1]&pidfilter=+pid.material_type:bog +
> instance.agency:900004 +instance.status:onShelf
> ?
>
> On Wed, Jun 29, 2022 at 8:57 AM Noah Torp-Smith <[email protected]>
> wrote:
>
> > To explain my question, first some domain background. We have a search
> > engine where users can search for materials they can borrow at their
> local
> > library.
> >
> > Our top level documents are *works*. An example of a work could be "Harry
> > Potter and the Philosopher's Stone". Examples of information stored at
> this
> > level could be the title, the author of the work, and a genre.
> >
> > At the second level, we have *manifestations" (we call these "pids"). It
> > might be that a work exists as a physical book, an ebook, as an audiobook
> > on CDs, an online audiobook, and there might be several editions of a
> book.
> > Information stored at this level includes material type, year of
> > publication, contributors (can be narrators, artists that have
> illustrated
> > in a particular edition).
> >
> > At the third level, we have *instances*. This includes information about
> > the physical books, and in which libraries they are located, which
> > department, and even down to locations within departments, if they are
> > currently on loan, on the shelf.
> >
> > Each document has a `doc_type` (which is either work, pid, or instance),
> > works have a list of pids, and pids have a list of instances associated
> > with them.
> >
> > Our job is to formulate solr queries on behalf of users that belong to
> > their local library, so that they can search for materials that is
> > available to them. Given a query, we want to return works, along with the
> > manifestations that match the query. A query can specify restrictions at
> > all three levels; you might be interested in the (physical) book from
> last
> > year written by Jussi Adler-Olsen, and it should be available at the
> local
> > branch of the community library.
> >
> > The way we find the appropriate works is pretty much in place. We use the
> > `/query` endpoint of solr, and we formulate a json object where
> >
> > * the `query` field contains the restrictions at the work level,
> something
> > like `work.creator:'Jussi Adler-Olsen'`.
> > * To restrict to works where manifestations/pids apply to the
> restrictions
> > at that level, we use a "parent which" construction in the `filter` part
> of
> > the solr query. Something like `{!parent
> > which='doc_type:work'}(pid.material_type:book AND  pid.year:(2021))`.
> > * To restrict to works where we can find a physical copy at the local
> > library, we add another element to the `filter`. Something like `{!parent
> > which='doc_type:work'}(instance.agency:900004 AND
> > instance.status:\"onShelf\")`, where 900004 is the id of the local
> library.
> >
> > That seems to work well. We get the works we are interested in. The
> > question I have is, how do I restrict the manifestations we return? We
> use
> > the field list and a `childFilter` to restrict manifestations, something
> > like this: `"fields": "work.workid work.title work.creator, pids, id,
> > pid.year, pid.material_type [child childFilter='pid.material_type:bog'
> > limit=-1]"`. That part of the filtering also seems to work OK, but we get
> > all the manifestations that match, from all libraries. We want to
> restrict
> > to those manifestations, where the local library has a copy.
> >
> > In other words, (I guess) we need to formulate a restriction in the
> > `[child childFilter=...]` part of the field list, restricting the
> > second-level documents on information stored at the third level. I am not
> > sure how to do that. Can anyone help?
> >
> > Thanks a lot in advance, and best regards.
> >
> > /Noah
> >
> >
> > --
> >
> > Noah Torp-Smith ([email protected])
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
>


-- 
Sincerely yours
Mikhail Khludnev

Reply via email to