Поиск части поля - PullRequest
0 голосов
/ 22 мая 2019

В настоящее время я работаю над проектом по сохранению данных из молекулы в формате 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 в формуле, упорядочены по весу.

...