Hello Florian, No. As an alternative you can put it into q param, suppressing scoring from undesired clauses with ^=0
On Thu, Feb 1, 2018 at 5:22 PM, Florian Fankhauser <f.fankhau...@littera.eu> wrote: > Hello, > given the following document structure (books as parent, libraries having > these books as children): > > <update> > <add> > <doc> > <field name="doc_type_s">book</field> > <field name="id">1000</field> > <field name="title_t">Mr. Mercedes</field> > <field name="autor_t">Stephen King</field> > <doc> > <field name="doc_type_s">library</field> > <field name="id">1000/100</field> > <field name="acquisition_date_i">20160810</field> > <field name="city_t">Innsbruck</field> > </doc> > <doc> > <field name="doc_type_s">library</field> > <field name="id">1000/101</field> > <field name="acquisition_date_i">20180103</field> > <field name="city_t">Hall</field> > </doc> > </doc> > <doc> > <field name="doc_type_s">book</field> > <field name="id">1001</field> > <field name="title_t">Noah</field> > <field name="autor_t">Sebastian Fitzek</field> > <doc> > <field name="doc_type_s">library</field> > <field name="id">1001/100</field> > <field name="acquisition_date_i">20170810</field> > <field name="city_t">Innsbruck</field> > </doc> > </doc> > </add> > </update> > > Now i want to get all books located in libraries in city "Innsbruck", > sorted by acquisition date descending. > In other words: i want to filter in the field city_i in the child > documents, but return only the parent document. And i want to sort by the > field acquisition_date_i in the child documents in descending order, newest > first. > > My first try: > ----- > > URL: > http://localhost:8983/solr/test1/select?q=title_t:*&fq={! > parent%20which=doc_type_s:book}city_t:Innsbruck&sort={! > parent%20which=doc_type_s:book%20score=max%20v=%27% > 2Bdoc_type_s:library%20%2B{!func}acquisition_date_i%27}%20desc > > URL params decoded: > q=title_t:* > fq={!parent which=doc_type_s:book}city_t:Innsbruck > sort={!parent which=doc_type_s:book score=max v='+doc_type_s:library > +{!func}acquisition_date_i'} desc > > Result: > { > "responseHeader":{ > "status":0, > "QTime":4, > "params":{ > "q":"title_t:*", > "fq":"{!parent which=doc_type_s:book}city_t:Innsbruck", > "sort":"{!parent which=doc_type_s:book score=max > v='+doc_type_s:library +{!func}acquisition_date_i'} desc"}}, > "response":{"numFound":2,"start":0,"docs":[ > { > "doc_type_s":"book", > "text":["book", > "Mr. Mercedes", > "Stephen King"], > "id":"1000", > "title_t":"Mr. Mercedes", > "title_t_fac":"Mr. Mercedes", > "autor_t":"Stephen King", > "autor_t_fac":"Stephen King", > "_version_":1591205521252155392}, > { > "doc_type_s":"book", > "text":["book", > "Noah", > "Sebastian Fitzek"], > "id":"1001", > "title_t":"Noah", > "title_t_fac":"Noah", > "autor_t":"Sebastian Fitzek", > "autor_t_fac":"Sebastian Fitzek", > "_version_":1591205521256349696}] > }} > > The result is wrong, because "Noah" should be before "Mr. Mercedes" in the > list. The reason is, i guess, because "Mr. Mercedes" has another child > document with a newer acquisition_date. But this child document is not in > city "Innsbruck" and should not influence the sorting. > > So i tried to add the city-filter to the sort-parameter as well in my > second try: > ----- > > URL: > http://localhost:8983/solr/test1/select?q=title_t:*&fq={! > parent%20which=doc_type_s:book}city_t:Innsbruck&sort={! > parent%20which=doc_type_s:book%20score=max%20v=%27% > 2Bdoc_type_s:library%20%2Bcity_t:Innsbruck%20%2B{! > func}acquisition_date_i%27}%20desc > > URL params decoded: > q=title_t:* > fq={!parent which=doc_type_s:book}city_t:Innsbruck > sort={!parent which=doc_type_s:book score=max v='+doc_type_s:library > +city_t:Innsbruck +{!func}acquisition_date_i'} desc > > (I added "+city_t:Innsbruck" to the sort param) > > Result: > { > "responseHeader":{ > "status":0, > "QTime":3, > "params":{ > "q":"title_t:*", > "fq":"{!parent which=doc_type_s:book}city_t:Innsbruck", > "sort":"{!parent which=doc_type_s:book score=max > v='+doc_type_s:library +city_t:Innsbruck +{!func}acquisition_date_i'} > desc"}}, > "response":{"numFound":2,"start":0,"docs":[ > { > "doc_type_s":"book", > "text":["book", > "Noah", > "Sebastian Fitzek"], > "id":"1001", > "title_t":"Noah", > "title_t_fac":"Noah", > "autor_t":"Sebastian Fitzek", > "autor_t_fac":"Sebastian Fitzek", > "_version_":1591205521256349696}, > { > "doc_type_s":"book", > "text":["book", > "Mr. Mercedes", > "Stephen King"], > "id":"1000", > "title_t":"Mr. Mercedes", > "title_t_fac":"Mr. Mercedes", > "autor_t":"Stephen King", > "autor_t_fac":"Stephen King", > "_version_":1591205521252155392}] > }} > > Now the sorting is correct. > > My question: > Is there a way to achieve the same result without having add all filters > to the search-param? > In other words: is there a way to sort on a child field, but only in > matching child-documents? > > > Thanks for your help. > > Florian > -- Sincerely yours Mikhail Khludnev