def test_nested_skip(): schema = fields.Schema( id=fields.ID(unique=True, stored=True), name=fields.TEXT(stored=True), name_ngrams=fields.NGRAMWORDS(minsize=4, field_boost=1.2), type=fields.TEXT, ) domain = [(u"book_1", u"The Dark Knight Returns", u"book"), (u"chapter_1", u"The Dark Knight Returns", u"chapter"), (u"chapter_2", u"The Dark Knight Triumphant", u"chapter"), (u"chapter_3", u"Hunt the Dark Knight", u"chapter"), (u"chapter_4", u"The Dark Knight Falls", u"chapter")] with TempIndex(schema) as ix: with ix.writer() as w: for id, name, typ in domain: w.add_document(id=id, name=name, name_ngrams=name, type=typ) with ix.searcher() as s: all_parents = query.Term("type", "book") wanted_parents = query.Term("name", "dark") children_of_wanted_parents = query.NestedChildren( all_parents, wanted_parents) r1 = s.search(children_of_wanted_parents) assert r1.scored_length() == 4 assert [hit["id"] for hit in r1 ] == ["chapter_1", "chapter_2", "chapter_3", "chapter_4"] wanted_children = query.And( [query.Term("type", "chapter"), query.Term("name", "hunt")]) r2 = s.search(wanted_children) assert r2.scored_length() == 1 assert [hit["id"] for hit in r2] == ["chapter_3"] complex_query = query.And( [children_of_wanted_parents, wanted_children]) r3 = s.search(complex_query) assert r3.scored_length() == 1 assert [hit["id"] for hit in r3] == ["chapter_3"]
def test_nested_children(): schema = fields.Schema(t=fields.ID(stored=True), track=fields.NUMERIC(stored=True), album_name=fields.TEXT(stored=True), song_name=fields.TEXT(stored=True)) ix = RamStorage().create_index(schema) with ix.writer() as w: with w.group(): w.add_document(t=u("album"), album_name=u("alfa bravo charlie")) w.add_document(t=u("track"), track=1, song_name=u("delta echo foxtrot")) w.add_document(t=u("track"), track=2, song_name=u("golf hotel india")) w.add_document(t=u("track"), track=3, song_name=u("juliet kilo lima")) with w.group(): w.add_document(t=u("album"), album_name=u("mike november oskar")) w.add_document(t=u("track"), track=1, song_name=u("papa quebec romeo")) w.add_document(t=u("track"), track=2, song_name=u("sierra tango ultra")) w.add_document(t=u("track"), track=3, song_name=u("victor whiskey xray")) with w.group(): w.add_document(t=u("album"), album_name=u("yankee zulu one")) w.add_document(t=u("track"), track=1, song_name=u("two three four")) w.add_document(t=u("track"), track=2, song_name=u("five six seven")) w.add_document(t=u("track"), track=3, song_name=u("eight nine ten")) with ix.searcher() as s: pq = query.Term("t", "album") aq = query.Term("album_name", "november") r = s.search(query.NestedChildren(pq, pq), limit=None) assert len(r) == 9 assert [str(hit["t"]) for hit in r] == ["track"] * 9 ncq = query.NestedChildren(pq, aq) assert list(ncq.docs(s)) == [5, 6, 7] r = s.search(ncq, limit=None) assert len(r) == 3 assert [str(hit["song_name"]) for hit in r] == [ "papa quebec romeo", "sierra tango ultra", "victor whiskey xray" ] zq = query.NestedChildren(pq, query.Term("album_name", "zulu")) f = sorting.StoredFieldFacet("song_name") r = s.search(zq, sortedby=f) assert [hit["track"] for hit in r] == [3, 2, 1]