def testKeyName(self): cq = ComposedQuery('coreA') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addFacet(core='coreB', facet='F0') self.assertEquals('keyA', cq.keyName('coreA', 'coreB')) self.assertEquals('keyB', cq.keyName('coreB', 'coreA')) self.assertEquals(set(['keyA']), cq.keyNames('coreA'))
def testFilterQueries(self): cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query='AQuery'), dict(core='coreB', query='anotherQuery')) self.assertEquals(None, cq.stop) self.assertEquals(None, cq.start) self.assertEquals([], cq.sortKeys) cq.stop = 10 cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] self.assertEquals('Q0', cq.queryFor('coreA')) self.assertEquals(['Q1', 'Q2'], cq.filterQueriesFor('coreA')) self.assertEquals(['F0', 'F1'], cq.facetsFor('coreA')) self.assertEquals(10, cq.stop) self.assertEquals(0, cq.start) self.assertEquals([dict(sortBy='field', sortDescending=True)], cq.sortKeys)
def testAsDictFromDict(self): cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query='AQuery'), dict(core='coreB', query='anotherQuery')) cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] cq.clustering = True cq.clusteringConfig = {'clusteringEps': 0.2} d = cq.asDict() cq2 = ComposedQuery.fromDict(d) self.assertEquals('coreA', cq2.resultsFrom) self.assertEquals(0, cq2.start) self.assertEquals(None, cq2.stop) self.assertEquals(['Q0', 'Q1', 'Q2'], cq2.queriesFor('coreA')) self.assertEquals(['F0', 'F1'], cq2.facetsFor('coreA')) self.assertEquals('keyA', cq2.keyName('coreA', 'coreB')) self.assertEquals('keyB', cq2.keyName('coreB', 'coreA')) self.assertEqual(1, len(cq2.unites)) queries = list(cq2.unites[0].queries()) self.assertEquals(({'core': 'coreA', 'keyName': 'keyA', 'query': 'AQuery'}, 'keyA'), queries[0]) self.assertEquals(({'core': 'coreB', 'keyName': 'keyB', 'query': 'anotherQuery'}, 'keyA'), queries[1]) self.assertEquals({'clusteringEps': 0.2}, cq2.clusteringConfig)
def testKeyFilterIgnoresKeysOutOfBoundsOfKeySet(self): self.addDocument(self.luceneB, identifier=str(100), keys=[('B', 100)], fields=[]) # Force key to be much more than bits in long[] in FixedBitSet, so it must be OutOfBounds q = ComposedQuery('coreA') q.setCoreQuery(core='coreA', query=MatchAllDocsQuery()) q.setCoreQuery(core='coreB', query=MatchAllDocsQuery()) q.addFacet(core='coreB', facet=dict(fieldname='cat_M', maxTerms=10)) q.addMatch(dict(core='coreA', uniqueKey=KEY_PREFIX+'A'), dict(core='coreB', key=KEY_PREFIX+'B')) result = returnValueFromGenerator(self.dna.any.executeComposedQuery(q)) self.assertEquals(4, len(result.hits))
def testAddFacetIncremental(self): cq = ComposedQuery('coreA') cq.addFacet(core='coreA', facet=dict(fieldname='Q1', maxTerms=10)) cq.addFacet(core='coreA', facet=dict(fieldname='Q2', maxTerms=10)) self.assertEquals([ dict(fieldname='Q1', maxTerms=10), dict(fieldname='Q2', maxTerms=10) ], cq.facetsFor('coreA'))
def testAddFilterQueryAfterConversion(self): cq = ComposedQuery('coreA') cq.setCoreQuery('coreA', query='A') cq.convertWith(coreA=lambda q: "converted_" + q) self.assertEquals('converted_A', cq.queryFor('coreA')) # Assert the following does not raise KeyError cq.addFilterQuery('coreA', 'field=value') cq.addFacet('coreA', 'F0') cq.addDrilldownQuery('coreA', 'drilldownQuery') cq.addOtherCoreFacetFilter('coreA', 'q')
def testAddFilterQueryAfterConversion(self): cq = ComposedQuery('coreA') cq.setCoreQuery('coreA', query='A') cq.convertWith(coreA=lambda q, **kwargs: "converted_" + q) self.assertEquals('converted_A', cq.queryFor('coreA')) # Assert the following does not raise KeyError cq.addFilterQuery('coreA', 'field=value') cq.addFacet('coreA', 'F0') cq.addDrilldownQuery('coreA', 'drilldownQuery') cq.addOtherCoreFacetFilter('coreA', 'q')
def testJoinFacetWithJoinDrilldownQueryFilters(self): q = ComposedQuery('coreA', query=luceneQueryFromCql('M=true')) q.addDrilldownQuery('coreB', drilldownQuery=('cat_O', ['true'])) q.addFacet('coreB', dict(fieldname='cat_O', maxTerms=10)) q.addMatch(dict(core='coreA', uniqueKey=KEY_PREFIX + 'A'), dict(core='coreB', key=KEY_PREFIX + 'B')) result = returnValueFromGenerator(self.dna.any.executeComposedQuery(query=q)) self.assertEquals(2, result.total) self.assertEquals([{ 'terms': [ {'count': 3, 'term': u'true'}, ], 'path': [], 'fieldname': u'cat_O' }], result.drilldownData)
def testJoinQueryThreeCores(self): q = ComposedQuery('coreA') q.setCoreQuery(core='coreB', query=luceneQueryFromCql('N=true')) q.setCoreQuery(core='coreC', query=luceneQueryFromCql('R=true')) q.addMatch(dict(core='coreA', uniqueKey=KEY_PREFIX+'A'), dict(core='coreB', key=KEY_PREFIX+'B')) q.addMatch(dict(core='coreA', uniqueKey=KEY_PREFIX+'A'), dict(core='coreC', key=KEY_PREFIX+'C')) q.addFacet(core='coreA', facet=dict(fieldname='cat_M', maxTerms=10)) q.addFacet(core='coreB', facet=dict(fieldname='cat_N', maxTerms=10)) q.addFacet(core='coreC', facet=dict(fieldname='cat_R', maxTerms=10)) result = returnValueFromGenerator(self.dna.any.executeComposedQuery(q)) self.assertEquals(1, result.total) self.assertEquals(set(['A-M']), self.hitIds(result.hits)) self.assertEquals([ {'terms': [{'count': 1, 'term': u'true'}], 'path': [], 'fieldname': u'cat_M'}, {'terms': [{'count': 1, 'term': u'true'}], 'path': [], 'fieldname': u'cat_N'}, {'terms': [{'count': 1, 'term': u'true'}], 'path': [], 'fieldname': u'cat_R'}, ], result.drilldownData)
def testAsDictFromDict(self): cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.relationalFilter = '{"type": "madeUpJoinQuery"}' cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query='AQuery'), dict(core='coreB', query='anotherQuery')) cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] cq.clustering = True cq.clusteringConfig = {'clusteringEps': 0.2} cq.rankQueryScoreRatio = 0.75 d = cq.asDict() cq2 = ComposedQuery.fromDict(d) self.assertEquals('coreA', cq2.resultsFrom) self.assertEquals(0, cq2.start) self.assertEquals(None, cq2.stop) self.assertEquals(['Q0', 'Q1', 'Q2'], cq2.queriesFor('coreA')) self.assertEquals('{"type": "madeUpJoinQuery"}', cq2.relationalFilter) self.assertEquals(['F0', 'F1'], cq2.facetsFor('coreA')) self.assertEquals('keyA', cq2.keyName('coreA', 'coreB')) self.assertEquals('keyB', cq2.keyName('coreB', 'coreA')) self.assertEqual(1, len(cq2.unites)) queries = list(cq2.unites[0].queries()) self.assertEquals(({ 'core': 'coreA', 'keyName': 'keyA', 'query': 'AQuery' }, 'keyA'), queries[0]) self.assertEquals(({ 'core': 'coreB', 'keyName': 'keyB', 'query': 'anotherQuery' }, 'keyA'), queries[1]) self.assertEquals({'clusteringEps': 0.2}, cq2.clusteringConfig) self.assertEquals(0.75, cq2.rankQueryScoreRatio)
def testAsDictFromDict(self): cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query='AQuery'), dict(core='coreB', query='anotherQuery')) cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] d = cq.asDict() cq2 = ComposedQuery.fromDict(d) self.assertEquals('coreA', cq2.resultsFrom) self.assertEquals(0, cq2.start) self.assertEquals(None, cq2.stop) self.assertEquals(['Q0', 'Q1', 'Q2'], cq2.queriesFor('coreA')) self.assertEquals(['F0', 'F1'], cq2.facetsFor('coreA')) self.assertEquals('keyA', cq2.keyName('coreA')) self.assertEquals('keyB', cq2.keyName('coreB'))
def testRepr(self): class AQuery(object): def __repr__(self): return 'NOT USED' def __str__(self): return 'AQuery' cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.relationalFilter = '{"type": "MadeUpJoinQuery"}' cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query=AQuery()), dict(core='coreB', query='anotherQuery')) cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] cq.storedFields = ['stored_field'] self.assertEquals({ 'type': 'ComposedQuery', 'query': { "cores": ["coreB", "coreA"], "drilldownQueries": {}, "facets": {"coreA": ["F0", "F1"]}, "filterQueries": {"coreA": ["Q1", "Q2"]}, "matches": {"coreA->coreB": [{"core": "coreA", "uniqueKey": "keyA"}, {"core": "coreB", "key": "keyB"}]}, "otherCoreFacetFilters": {}, "queries": {"coreA": "Q0", "coreB": "Q3"}, "rankQueries": {}, 'relationalFilter': '{"type": "MadeUpJoinQuery"}', "resultsFrom": "coreA", "sortKeys": [{"sortBy": "field", "sortDescending": True}], "start": 0, "storedFields": ['stored_field'], "unites": [{"A": ["coreA", "AQuery"], "B": ["coreB", "anotherQuery"]}] } }, cq.infoDict())
def testAddFacetIncremental(self): cq = ComposedQuery('coreA') cq.addFacet(core='coreA', facet=dict(fieldname='Q1', maxTerms=10)) cq.addFacet(core='coreA', facet=dict(fieldname='Q2', maxTerms=10)) self.assertEquals([dict(fieldname='Q1', maxTerms=10), dict(fieldname='Q2', maxTerms=10)], cq.facetsFor('coreA'))
def testRepr(self): class AQuery(object): def __repr__(self): return 'NOT USED' def __str__(self): return 'AQuery' cq = ComposedQuery('coreA') cq.setCoreQuery(core='coreA', query='Q0') cq.addFilterQuery(core='coreA', query='Q1') cq.addFilterQuery(core='coreA', query='Q2') cq.relationalFilter = '{"type": "MadeUpJoinQuery"}' cq.addFacet(core='coreA', facet='F0') cq.addFacet(core='coreA', facet='F1') cq.setCoreQuery(core='coreB', query='Q3') cq.addMatch(dict(core='coreA', uniqueKey='keyA'), dict(core='coreB', key='keyB')) cq.addUnite(dict(core='coreA', query=AQuery()), dict(core='coreB', query='anotherQuery')) cq.start = 0 cq.sortKeys = [dict(sortBy='field', sortDescending=True)] cq.storedFields = ['stored_field'] self.assertEquals( { 'type': 'ComposedQuery', 'query': { "cores": ["coreB", "coreA"], "drilldownQueries": {}, "facets": { "coreA": ["F0", "F1"] }, "filterQueries": { "coreA": ["Q1", "Q2"] }, "matches": { "coreA->coreB": [{ "core": "coreA", "uniqueKey": "keyA" }, { "core": "coreB", "key": "keyB" }] }, "otherCoreFacetFilters": {}, "queries": { "coreA": "Q0", "coreB": "Q3" }, "rankQueries": {}, 'relationalFilter': '{"type": "MadeUpJoinQuery"}', "resultsFrom": "coreA", "sortKeys": [{ "sortBy": "field", "sortDescending": True }], "start": 0, "storedFields": ['stored_field'], "unites": [{ "A": ["coreA", "AQuery"], "B": ["coreB", "anotherQuery"] }] } }, cq.infoDict())