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 <http://www.griddynamics.com> <mkhlud...@griddynamics.com>