В настоящее время я работаю над проектом по сохранению данных из молекулы в формате json в базе данных Elasticsearch.
У меня уже есть функция, которая запрашивает полную формулу и возвращает документ с полной формулой, когдаЯ ищу формулу «C» и, например, «C6H5Cl».Я пытался реализовать 'query_string', но у меня есть ошибка сериализатора, и я не могу найти решение.
Вот функция поиска:
def search_formula(formula_value, page, nbrpp):
"""
get a compound by it's formula
:param formula_value: a string equal to a formula
:param page: number of displayed page of result
:param nbrpp: number of result in a page
:return: json list of result
"""
# connect to elastic search
es_host = settings.ELASTICSEARCH
es = Elasticsearch(hosts=[es_host])
q = Q('bool',
should=[Q('match', data__molecule__formula=formula_value)],
)
s = Search().using(es).query(q)[nbrpp*page-nbrpp:(nbrpp*page)-1]
return _search_to_json(search=s.execute(), nbresult=s.count())
И версия сстрока запроса, которая не работает:
def search_formula(formula_value, page, nbrpp):
"""
get a compound by it's formula
:param formula_value: a string equal to a formula
:param page: number of displayed page of result
:param nbrpp: number of result in a page
:return: json list of result
"""
# connect to elastic search
es_host = settings.ELASTICSEARCH
es = Elasticsearch(hosts=[es_host])
q = Q('query_string', query=[Q(data__molecule__formula=formula_value)])
print()
s = Search().using(es).query(q)[nbrpp*page-nbrpp:(nbrpp*page)-1]
return _search_to_json(search=s.execute(), nbresult=s.count())
Я ожидал, что все результаты, содержащие C в формуле, упорядочены по весу.