100 |
100 |
def __init__(self):
|
101 |
101 |
props = get_index_properties()
|
102 |
102 |
self.index_host = [x.strip() for x in props['es_index'].split(',')]
|
103 |
|
self.client = Elasticsearch(hosts=self.index_host)
|
|
103 |
self.client = Elasticsearch(hosts=self.index_host, timeout=600000)
|
104 |
104 |
self.index_name = props['api.index']
|
105 |
105 |
|
106 |
106 |
def get_main_page_stats(self):
|
107 |
|
stats = dict(total =int(Search(using=self.client, index=self.index_name).doc_type('scholix').count()/2))
|
|
107 |
stats = dict(total =int(Search(using=self.client, index=self.index_name+"_scholix").count()/2))
|
108 |
108 |
for item in ['dataset', 'publication']:
|
109 |
|
s= Search(using=self.client, index=self.index_name).doc_type('object').query(Q('match', typology=item))
|
|
109 |
s= Search(using=self.client, index=self.index_name+"_object").query(Q('match', typology=item))
|
110 |
110 |
stats[item] = s.count()
|
111 |
111 |
return stats
|
112 |
112 |
|
113 |
113 |
def query_by_id(self, id):
|
114 |
|
s = Search(using=self.client, index=self.index_name).doc_type('object')
|
|
114 |
s = Search(using=self.client, index=self.index_name+"_object")
|
115 |
115 |
s = s.query(create_pid_query(id))
|
116 |
116 |
s.aggs.bucket('typologies', 'terms', field='typology')
|
117 |
117 |
s.aggs.bucket('all_datasources', 'nested', path='datasources').bucket('all_names', 'terms',
|
... | ... | |
160 |
160 |
publishers=publishers), hits=hits)
|
161 |
161 |
|
162 |
162 |
def simple_query(self, textual_query, start=None, end=None, user_filter=None):
|
163 |
|
s = Search(using=self.client, index=self.index_name).doc_type('object')
|
164 |
|
|
|
163 |
s = Search(using=self.client, index=self.index_name+"_object")
|
165 |
164 |
if not textual_query == '*':
|
166 |
|
q = Q('match', _all=textual_query)
|
|
165 |
q = Q("multi_match", query=textual_query, fields=['title', 'abstract'])
|
167 |
166 |
else:
|
168 |
167 |
q = Q()
|
169 |
168 |
s.aggs.bucket('typologies', 'terms', field='typology')
|
... | ... | |
199 |
198 |
s = s[start:end]
|
200 |
199 |
response = s.execute()
|
201 |
200 |
|
|
201 |
print (response.hits.total)
|
|
202 |
|
202 |
203 |
hits = []
|
203 |
204 |
|
204 |
205 |
for index_result in response.hits:
|
... | ... | |
233 |
234 |
if len(tag.key) > 0:
|
234 |
235 |
publishers.append(dict(key=tag.key, count=tag.doc_count))
|
235 |
236 |
|
236 |
|
return DLIESResponse(total=response.hits.total,
|
|
237 |
return DLIESResponse(total=s.count(),
|
237 |
238 |
facet=dict(pid=pid_types, typology=typologies, datasource=datasources,
|
238 |
239 |
publishers=publishers), hits=hits)
|
239 |
240 |
|
... | ... | |
242 |
243 |
query_type = Q('nested', path='target', query=Q('bool', must=[Q('match', **args)]))
|
243 |
244 |
args_id = {'source.dnetIdentifier': object_id}
|
244 |
245 |
query_for_id = Q('nested', path='source', query=Q('bool', must=[Q('match', **args_id)]))
|
245 |
|
s = Search(using=self.client).index(self.index_name).doc_type('scholix').query(query_for_id & query_type)
|
|
246 |
s = Search(using=self.client).index(self.index_name+"_scholix").query(query_for_id & query_type)
|
246 |
247 |
if start:
|
247 |
248 |
s = s[start:start + 10]
|
248 |
249 |
|
... | ... | |
275 |
276 |
|
276 |
277 |
def item_by_id(self, id, type=None, start=None):
|
277 |
278 |
try:
|
278 |
|
res = self.client.get(index=self.index_name, doc_type='object', id=id)
|
|
279 |
res = self.client.get(index=self.index_name+"_object", id=id)
|
279 |
280 |
hits = []
|
280 |
281 |
input_source = res['_source']
|
281 |
282 |
fixed_titles = []
|
new portal implemented