本文整理汇总了Python中elastic.query.Query.missing_terms方法的典型用法代码示例。如果您正苦于以下问题:Python Query.missing_terms方法的具体用法?Python Query.missing_terms怎么用?Python Query.missing_terms使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类elastic.query.Query
的用法示例。
在下文中一共展示了Query.missing_terms方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_hits_by_study_id
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import missing_terms [as 别名]
def get_hits_by_study_id(cls, study_id, sources=[]):
''' Get visible/authenticated hits. '''
hits_query = ElasticQuery(BoolQuery(must_arr=Query.term('dil_study_id', study_id),
b_filter=Filter(Query.missing_terms("field", "group_name"))),
sources=sources)
docs = Search(hits_query, idx=ElasticSettings.idx('REGION', 'STUDY_HITS'), size=1000).search().docs
ens_ids = [gene for doc in docs if getattr(doc, 'genes') for gene in getattr(doc, 'genes')]
gene_docs = utils.get_gene_docs_by_ensembl_id(ens_ids, ['symbol'])
for doc in docs:
if getattr(doc, 'genes'):
genes = {}
for ens_id in getattr(doc, 'genes'):
try:
genes[ens_id] = getattr(gene_docs[ens_id], 'symbol')
except KeyError:
genes = {ens_id: ens_id}
setattr(doc, 'genes', genes)
build_info = getattr(doc, 'build_info')
for bi in build_info:
if bi['build'] == settings.DEFAULT_BUILD:
setattr(doc, "loc", "chr" + bi['seqid'] + ":" +
str(locale.format("%d", bi['start'], grouping=True)) + "-" +
str(locale.format("%d", bi['end'], grouping=True)))
setattr(doc, "encoded_loc", "chr" + bi['seqid'] + "%3A" +
str(bi['start']) + ".." + str(bi['end']))
return docs
示例2: _auth_arr
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import missing_terms [as 别名]
def _auth_arr(user):
''' Get authentication array for BoolQuery for retrieving public and
authenticated documents. '''
auth_arr = [Query.missing_terms("field", "group_name")] # all public documents
try:
auth_arr.append(Query.terms("group_name", # all documents in the user group
[gp.lower() for gp in get_user_groups(user)]).query_wrap())
except Http404:
# not logged in
pass
return auth_arr
示例3: pad_region_doc
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import missing_terms [as 别名]
def pad_region_doc(cls, region):
'''Adds details of disease_loci & hits for a given region doc'''
hits_idx = ElasticSettings.idx('REGION', 'STUDY_HITS')
disease_loci = getattr(region, "disease_loci")
locus_start = Agg('region_start', 'min', {'field': 'build_info.start'})
locus_end = Agg('region_end', 'max', {'field': 'build_info.end'})
match_agg = Agg('filtered_result', 'filter', Query.match("build_info.build", 38).query_wrap(),
sub_agg=[locus_start, locus_end])
build_info_agg = Agg('build_info', 'nested', {"path": 'build_info'}, sub_agg=[match_agg])
query = ElasticQuery(FilteredQuery(Query.terms("disease_locus", disease_loci),
Filter(BoolQuery(should_arr=[Query.missing_terms("field", "group_name")]
))))
resultObj = Search(search_query=query, idx=hits_idx, aggs=Aggs(build_info_agg)).search()
hit_ids = []
markers = []
genes = []
studies = []
pmids = []
for doc in resultObj.docs:
hit_ids.append(doc.doc_id())
markers.append(getattr(doc, "marker"))
if hasattr(doc, "genes") and getattr(doc, "genes") != None:
genes.extend([g for g in getattr(doc, "genes")])
studies.append(getattr(doc, "dil_study_id"))
pmids.append(getattr(doc, "pmid"))
build_info = getattr(resultObj.aggs['build_info'], 'filtered_result')
region_start = int(build_info['region_start']['value'])
region_end = int(build_info['region_end']['value'])
build_info = {
'build': 38,
'seqid': getattr(region, "seqid"),
'start': region_start,
'end': region_end
}
setattr(region, "build_info", build_info)
setattr(region, "hits", hit_ids)
setattr(region, "markers", list(set(markers)))
setattr(region, "genes", list(set(genes)))
setattr(region, "studies", list(set(studies)))
setattr(region, "pmids", list(set(pmids)))
return region
示例4: test_elastic_group_name
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import missing_terms [as 别名]
def test_elastic_group_name(self):
'''
Testing the workflow defined in: https://killin.cimr.cam.ac.uk/nextgensite/2015/08/05/region-authorization/
Testing various elastic queries
idx doc:
"_source":{"attr": {"region_id": "803", "group_name": "[\"DIL\"]", "Name": "4q27"},
"seqid": "chr4", "source": "immunobase", "type": "region",
"score": ".", "strand": ".", "phase": ".", "start": 122061159, "end": 122684373}
idx_query:
Private(in given group) OR Public
-d '{"query":{"filtered":{"filter":{"bool": {
"should": [
{"terms": {"group_name":["dil"]}},
{ "missing": { "field": "group_name" }}
]
}}}}}'
Private(in given group):
-d '{"query":{"filtered":{"filter":{"terms":{"group_name":["dil"]}}}}}'
Public:
-d {'query': {'filtered': {'filter': {'missing': {'field': 'group_name'}},
- 'query': {'term': {'match_all': '{}'}}}}}
'''
# get the groups for the given user
response = self.client.post('/accounts/login/', {'username': 'test_user', 'password': 'test_pass'})
self.assertTrue(response.status_code, "200")
logged_in_user = User.objects.get(id=self.client.session['_auth_user_id'])
if logged_in_user and logged_in_user.is_authenticated():
user_groups = get_user_groups(logged_in_user)
self.assertTrue('READ' in user_groups, "user present in READ group")
# make sure the user is not yet in DIL group
self.assertFalse('DIL' in user_groups, "user not present in DIL group")
group_names = get_user_groups(logged_in_user)
if 'READ' in group_names : group_names.remove('READ') # @IgnorePep8
group_names = [x.lower() for x in group_names]
self.assertTrue(len(group_names) == 0, "No group present")
# Match all query, as there is no group we do a match all
query = ElasticQuery(Query.match_all())
expected_query_string = {"query": {"match_all": {}}}
self.assertJSONEqual(json.dumps(query.query), json.dumps(expected_query_string), "Query string matched")
Search.index_refresh(self.index_name)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 12, "Elastic string query retrieved all public regions")
# Filtered query for group names, add the user to DIL group and get the query string
self.dil_group = Group.objects.create(name='DIL')
logged_in_user.groups.add(self.dil_group)
group_names = get_user_groups(logged_in_user)
if 'READ' in group_names : group_names.remove('READ') # @IgnorePep8
group_names = [x.lower() for x in group_names]
self.assertTrue(len(group_names) > 0, "More than 1 group present")
self.assertTrue("dil" in group_names, "DIL group present")
# retrieves all docs with missing field group_name - 11 docs
terms_filter = TermsFilter.get_missing_terms_filter("field", "attr.group_name")
query = ElasticQuery.filtered(Query.match_all(), terms_filter)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 11, "Elastic string query retrieved all public regions")
# build filtered boolean query to bring all public docs + private docs 11+1 = 12 docs
query_bool = BoolQuery()
query_bool.should(Query.missing_terms("field", "group_name")) \
.should(Query.terms("group_name", group_names).query_wrap())
query = ElasticQuery.filtered_bool(Query.match_all(), query_bool)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 12, "Elastic string query retrieved both public + private regions")
terms_filter = TermsFilter.get_terms_filter("attr.group_name", group_names)
query = ElasticQuery.filtered(Query.match_all(), terms_filter)
elastic = Search(query, idx=self.index_name)
docs = elastic.search().docs
self.assertTrue(len(docs) == 1, "Elastic string query retrieved one private regions")
self.assertEqual(docs[0].attr['Name'], "4q27", "type matched region")
self.assertEqual(docs[0].attr['region_id'], "803", "type matched region")
self.assertEqual(docs[0].attr['group_name'], "[\"DIL\"]", "type matched region")
示例5: get_hits
# 需要导入模块: from elastic.query import Query [as 别名]
# 或者: from elastic.query.Query import missing_terms [as 别名]
def get_hits(cls, hit_ids, sources=[]):
''' Get visible/authenticated hits. '''
hits_query = ElasticQuery(BoolQuery(must_arr=Query.ids(hit_ids),
b_filter=Filter(Query.missing_terms("field", "group_name"))))
return Search(hits_query, idx=ElasticSettings.idx('REGION', 'STUDY_HITS'), size=len(hit_ids)).search().docs