Thanks, Mikhail. I eventually added a distinguishing field "path" and queried unambiguously.
>Четверг, 17 марта 2016, 9:46 -04:00 от Mikhail Khludnev ><mkhlud...@griddynamics.com>: > >Hello, > >Please find inline > >On Wed, Mar 16, 2016 at 10:10 PM, Alisa Z. < prol...@mail.ru > wrote: >> Hi all, >>I have a deeply multi-level data structure (up to 6-7 levels deep) where due >>to the nature of the data some nested documents can have same type names at >>various levels. How to form a proper query on a nested field that would >>contain "a path" that defines that field? >> >>I'll clarify with an example: >> >>Reduced dataset: >> >>[ >> { >> id : book1, >> type_s:book, >> title_t : "The Way of Kings", >> author_s : "Brandon Sanderson", >> _childDocuments_ : [ >> { >> id: book1_c1, >> type_s:body, >> text_t:"body text of the book... ", >> _childDocuments_:[ >> {id: book2_c1_e1, >> type_s:"keywords", >> text_t:["The Matrix", "Neo", "character", "somebody", ...]} >> ] >> }, >> { id: book1_c2, >> type_s:title, >> text_t:"This book was too long.", >> _childDocuments_:[ >> {id: book2_c1_e1, >> type_s:"keywords", >> text_t:["The Matrix", "Neo"]} >> ] >> } >> ] >> }, >> ... >>] >> >>So there are different paths to text_t field: >>* book.body.keywords.text_t >>* book.title.keywords.text_t >>I need to write a query that returns, say, all books which have keyword >>"Neo" in their title (not body). >>I tried : >> >>(1) q={!parent which=type_s:book}type_s:keywords AND text_t:Neo >>which is obviously incorrect (returns both books whose body keywords and >>title keywords contain Neo): >> >>(2) q={!parent which=type_s:book}type_s:body^=0{!parent >>which=type_s:body}type_s:keywords AND text_t:Neo > >I'd say this might work, however I prefer to use v=$foo to break query >unambiguously. And also >https://lucidworks.com/blog/2011/12/28/why-not-and-or-and-not/ but make sure >that + is encoded as %2B in url. > >q={!parent which=type_s:book v=$titles}&titles=+type_s:title^=0 +{!parent >which='type_s:(body title book)' v=$keywords}&keywords=+type_s:keywords^=0 >+text_t:Neo > >specifying all sibling scopes discriminators is a black magic of block join >(if it ever works). Please get back with parsed query (from debugQuery=true) >and actual/expected result. Anyway, explicitly resolving scopes >(type_s:body_keywords, type_s:title_keywords) might be much maintainable. > > which does not return correct results (and I am not quite sure what it >really does, I just saw it in another thread of this mailing list) >> >>Can you help me to understand whether it is possible? >>Or do I have to give unique types for documents at different levels of >>nesting (e.g., type_s:body_keywords & type_s:title_keywords)? I am trying to >>avoid, finding a way to specify a path would be much much more preferable. >> >> >>Thank you in advance and looking forward to hearing from you >>-- >>Alisa Zhila > > >-- >Sincerely yours >Mikhail Khludnev >Principal Engineer, >Grid Dynamics > > >