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 >