Hi Mikhail,
thank you very much - it's exactly what I need. When I have tried it first
a had problem with spaces and it seems that it doesn't work, but now it
works great.

Thanks and have a nice day
Jan



2017-03-21 10:11 GMT+01:00 Mikhail Khludnev <m...@apache.org>:

> Hello Jan,
> If I get you right, you need to find every word either in parent or child
> level, hence:
>
> q=+({!edismax qf=$pflds v=$w1} {!parent ..}{!edismax qf=$cflds v=$w1})
> +({!edismax qf=$pflds v=$w1} {!parent ..}{!edismax qf=$cflds
> v=$w1})...&w1=foo&w2=bar
> note that spaces and + matter much. This yields cross-matches, but you
> probably don't bother about them.
>
> On Sun, Mar 19, 2017 at 11:58 AM, Jan Nekuda <jan.nek...@gmail.com> wrote:
>
> > Hi Michael,
> > thank you for fast answer - I have tried it, but it's not exactly what I
> > need. I hope that I understood it good - the problem is that if I will
> > write foo bar and foo bar is not found in root entity then it returns
> > nothing even if any field in children contains foo bar.
> > I need to write foo bar and find all documents where foo bar exists in
> > document A OR B OR C OR D even if in A will have FOO and in e.g C will be
> > bar. But if I will write bar of chocolate then I need return nothing.
> >
> > my idea was to use
> > edismax and filter query for each word:
> > http://localhost:8983/solr/demo/select?q=*:*&fq={!parent
> > which=type:root}foo*&fq={!parent
> > which=typ:root}bar*&wt=json&indent=true&defType=edismax&
> > qf=$allfields&stopwords=true&lowercaseOperators=true&allfieldscolor,
> > first_country, power, name, country
> >
> > the problem is that I'm not able to find also parent documents in one
> > condition with children.
> >
> > How I wrote I'm able solve it with another parent and then also doc A
> will
> > be child and everything will work fine - but I would like to solve it
> > better.
> >
> >
> > Do you have or someone else another idea?:)
> >
> > Thanks
> > Jan
> >
> >
> > 2017-03-16 21:51 GMT+01:00 Mikhail Khludnev <m...@apache.org>:
> >
> > > Hello Jan,
> > >
> > > What if you combine child and parent dismaxes like below
> > > q={!edismax qf=$parentfields}foo bar {!parent ..}{!dismax
> qf=$childfields
> > > v=$childclauses}&childclauses=foo bar +type:child&parentfields=...&
> > > parentfields=...
> > >
> > > On Thu, Mar 16, 2017 at 10:54 PM, Jan Nekuda <jan.nek...@gmail.com>
> > wrote:
> > >
> > > > Hello Mikhail,
> > > >
> > > > thanks for fast answer. The problem is, that I want to have the
> dismax
> > on
> > > > child and parent together - to have the filter evaluated together.
> > > >
> > > > I need to have documents:
> > > >
> > > >
> > > > path: car
> > > >
> > > > type:car
> > > >
> > > > color:red
> > > >
> > > > first_country: CZ
> > > >
> > > > name:seat
> > > >
> > > >
> > > >
> > > > path: car\engine
> > > >
> > > > type:engine
> > > >
> > > > power:63KW
> > > >
> > > >
> > > >
> > > > path: car\engine\manufacturer
> > > >
> > > > type:manufacturer
> > > >
> > > > name: xx
> > > >
> > > > country:PL
> > > >
> > > >
> > > > path: car
> > > >
> > > > type:car
> > > >
> > > > color:green
> > > >
> > > > first_country: CZ
> > > >
> > > > name:skoda
> > > >
> > > >
> > > >
> > > > path: car\engine
> > > >
> > > > type:engine
> > > >
> > > > power:88KW
> > > >
> > > >
> > > >
> > > > path: car\engine\manufacturer
> > > >
> > > > type:manufacturer
> > > >
> > > > name: yy
> > > >
> > > > country:PL
> > > >
> > > >
> > > > where car is parent document engine is its child a manufacturer is
> > child
> > > > of engine and the structure can be deep.
> > > >
> > > > I need to make a query with edismax over fields color, first_country,
> > > > power, name, country over parent and all childern.
> > > >
> > > > when I ask then "seat 63 kw" i need to get seat car
> > > >
> > > > the same if I will write only "seat" or only "63kw" or only "xx"
> > > >
> > > > but if I will write "seat 88kw" i expect that i will get no result
> > > >
> > > > I need to return parents in which tree are all the words which I
> wrote
> > to
> > > > query.
> > > >
> > > > How I wrote before my solution was to split the query text and use
> > q:*:*
> > > > and for each /word/ in query make
> > > >
> > > > fq={!parent which=type:car}/word//
> > > > /
> > > >
> > > > //and edismax with qf=color, first_country, power, name, country
> > > >
> > > > Thank you for your time:)
> > > >
> > > > Jan
> > > >
> > > >
> > > > Dne 16.03.2017 v 20:00 Mikhail Khludnev napsal(a):
> > > >
> > > >
> > > > Hello,
> > > >>
> > > >> It's hard to get into the problem. but you probably want to have
> > dismax
> > > on
> > > >> child level:
> > > >> q={!parent ...}{!edismax qf='childF1 childF2' v=$chq}&chq=foo bar
> > > >> It's usually broken because child query might match parents which is
> > not
> > > >> allowed. Thus, it's probably can solved by adding +type:child into
> > chq.
> > > >> IIRC edismax supports lucene syntax.
> > > >>
> > > >> On Thu, Mar 16, 2017 at 4:47 PM, Jan Nekuda <jan.nek...@gmail.com>
> > > wrote:
> > > >>
> > > >> Hi,
> > > >>> I have a question for which I wasn't able to find a good solution.
> > > >>> I have this structure of documents
> > > >>>
> > > >>> A
> > > >>> |\
> > > >>> | \
> > > >>> B \
> > > >>>       \
> > > >>>        C
> > > >>>         \
> > > >>>          \
> > > >>>           \
> > > >>>            D
> > > >>>
> > > >>> Document type A has fields id_number, date_from, date_to
> > > >>> Document type C  has fields first_name, surname, birthdate
> > > >>> Document type D AND B has fields street_name, house_number, city
> > > >>>
> > > >>>
> > > >>> I want to find *all parents with block join and edismax*.
> > > >>> The problem is that I have found that possible is find children by
> > > >>> parent,
> > > >>> or parent by children.
> > > >>> *I want to find parent by values in parent and in children*. I want
> > to
> > > >>> use
> > > >>> edismax with all fields from all documents (id_number, date_from,
> > > >>> date_to,
> > > >>> has fields first_name, surname, birthdate,street_name,
> house_number,
> > > >>> city).
> > > >>> I want to write *Hynek* AND *Brojova* AND 14 and I expect that it
> > > returns
> > > >>> document A because it found Hynek in surname, Brojova in street and
> > 14
> > > in
> > > >>> house number.
> > > >>> This is easy with {!parent which=type:A}
> > > >>> the problem is, that I'm not able to find by condition 789 AND
> > > *Brojova*
> > > >>> where 789 is id_number from type A and Brojova is Street from D.
> > > >>>
> > > >>> In short I need to find all parents of tree (parent and childern)
> in
> > > >>> which
> > > >>> are matched all the word which i send to condition
> > > >>>
> > > >>>
> > > >>> My only solution is to make root type X. Then A will be its child.
> > > Then I
> > > >>> can use {!parent which=type:X}.
> > > >>> Than this will work:
> > > >>>
> > > >>> http://localhost:8983/solr/demo/select?q=*:*&fq={!parent
> > > >>> which=type:X}brojova*&fq={!parent which=type:X}16&wt=json&
> > > >>> indent=true&defType=edismax&qf=id_number date_from date_to has
> > fields
> > > >>> first_name surname birthdate street_name house_number
> > > >>> city&stopwords=true&
> > > >>> lowercaseOperators=true
> > > >>>
> > > >>>
> > > >>> But I believe it can be solved much better.
> > > >>>
> > > >>> X
> > > >>> |
> > > >>> A
> > > >>> |\
> > > >>> | \
> > > >>> B \
> > > >>>       \
> > > >>>        C
> > > >>>         \
> > > >>>          \
> > > >>>           \
> > > >>>            D
> > > >>>
> > > >>>
> > > >>> Thanks for your help
> > > >>> Jan
> > > >>>
> > > >>>
> > > >>
> > > >>
> > > >
> > > >
> > > > ---
> > > > Tato zpráva byla zkontrolována na viry programem Avast Antivirus.
> > > > https://www.avast.com/antivirus
> > > >
> > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > >
> >
>
>
>
> --
> Sincerely yours
> Mikhail Khludnev
>

Reply via email to