Bool и запрос на Elasticsearch 6.5.3 - PullRequest
0 голосов
/ 20 января 2019

Я работаю над ElasticSearch 6.5.3 и. Пожалуйста, найдите ниже мой код:

from elasticsearch import Elasticsearch, helpers

def search(es_object, index_name, request):
    toto = es_object.search(index=index_name, body=request)
    return toto

fuzziness = 1
request1 = {
    "query": {
        "match" : {
            "Family_name" : {
                "query" : family_names,
                "fuzziness": fuzziness,
            }
        }
    },
    "size" : size
}

request2 = {
    "query": {
        "match" : {
            "First_name" : {
                "query" : first_names,
                "fuzziness": fuzziness,
            }
        }
    },
    "size" : size
}

result1 = search(es,ELASTICSEARCH_INDEX_NAME,request1)
result2 = search(es,ELASTICSEARCH_INDEX_NAME,request2)

Я бы хотел сделать нечеткий запрос по имени и фамилии. Как я могу это сделать, пожалуйста?

Я попробовал следующее:

request = {
    "bool": {
        "must": [
            {
                "query": {
                    "match" : {
                        "First_name" : {
                            "query" : family_name,
                            "fuzziness": fuzziness,
                        }
                    }
                },
                "query": {
                    "match" : {
                        "Prénom" : {
                            "query" : firstname,
                            "fuzziness": fuzziness,
                        }
                    }
                }
            }
        ]
    }
}


result = search(es,ELASTICSEARCH_INDEX_NAME,request)

Я получил следующую ошибку, означающую, что в моем запросе есть какая-то проблема. Кажется, я не могу объединить два запроса на совпадение с нечеткостью одновременно

RequestError: RequestError(400, 'parsing_exception', 'Unknown key 
for a START_OBJECT in [bool].')

1 Ответ

0 голосов
/ 20 января 2019

Ваш запрос немного неправильный, вам нужно исправить его следующим образом:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "First_name": {
              "query": "family_name",
              "fuzziness": fuzziness
            }
          }
        },
        {
          "match": {
            "Prénom": {
              "query": "firstname",
              "fuzziness": fuzziness
            }
          }
        }
      ]
    }
  }
}

Причина в том, что логический массив запросов уже понимает, что он будет объектом запроса, поэтому вы ненеобходимо указать его снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...