Фонетический и нечеткий поиск наasticsearch 6.5 - PullRequest
0 голосов
/ 26 декабря 2018

Я проиндексировал некоторые CSV-файлы в Elasticsearch, и теперь я пытаюсь выполнить поиск по некоторым столбцам (в основном два).Я хотел бы сделать: - точный поиск - фонетический поиск - нечеткий поиск - фонетический и нечеткий поиск одновременно - все это за один раз, если это возможно

Пожалуйста, найдите ниже мой код для ElasticSearch 6.5.1 иPython 3.7

import time
from elasticsearch import Elasticsearch
from elasticsearch import helpers

ELASTICSEARCH_HOST = "localhost"
ELASTICSEARCH_PORT = 9200
ELASTICSEARCH_INDEX_NAME = "phonetic_index"

es = Elasticsearch([{'host': ELASTICSEARCH_HOST, 'port': 
ELASTICSEARCH_PORT}])


def printSearchResult(caption, res):
    print(caption)
    hits = res['hits']['hits']
    for hit in hits:
        print("%0.2f %s" % (hit['_score'], hit['_source'] 
 ['text']))
    print("\n")


request_body = {
  "query": {
    "bool": {
      "must": [
        {
          "query": {
            "match": {
               "text.phonetic": {
                "query": "Meier"
              }
            }
          }
        }],
     "should" : [
        {
          "fuzzy": {
            "text": {
              "value": "Meier",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  },
  "size" : 15
}


result_phonetic_and_fuzzy2 = es.search(index = 
ELASTICSEARCH_INDEX_NAME, body = request_body2)

printSearchResult("Result of search using phonetic search combined 
with fuzzy search with fuzziness 2:", result_phonetic_and_fuzzy2)

Когда я пробую свой код, у меня появляется следующая ошибка

-------------------------------------------------------------------- 
-------
RequestError                              Traceback (most recent 
call last)
<ipython-input-35-3790ca54c72b> in <module>()
    138 
    139 
--> 140 result_phonetic_and_fuzzy2 = es.search(index = 
 ELASTICSEARCH_INDEX_NAME, body = request_body2)
    141 
    142 printSearchResult("Result of search using phonetic search 
combined with fuzzy search with fuzziness 2:", 
result_phonetic_and_fuzzy2)

~/anaconda3/lib/python3.7/site- 
packages/elasticsearch/client/utils.py in _wrapped(*args, **kwargs)
     74                 if p in kwargs:
     75                     params[p] = kwargs.pop(p)
---> 76             return func(*args, params=params, **kwargs)
     77         return _wrapped
     78     return _wrapper

~/anaconda3/lib/python3.7/site- 
packages/elasticsearch/client/__init__.py in search(self, index, 
doc_type, body, params)
    658             index = '_all'
    659         return self.transport.perform_request('GET', 
_make_path(index,
--> 660             doc_type, '_search'), params=params, body=body)
    661 
    662     @query_params('_source', '_source_exclude', 
'_source_include',

~/anaconda3/lib/python3.7/site-packages/elasticsearch/transport.py 
in perform_request(self, method, url, headers, params, body)
    316                 delay = 2**attempt - 1
    317                 time.sleep(delay)
--> 318                 status, headers_response, data = 
connection.perform_request(method, url, params, body, 
headers=headers, ignore=ignore, timeout=timeout)
    319 
    320             except TransportError as e:

~/anaconda3/lib/python3.7/site- 
packages/elasticsearch/connection/http_urllib3.py in 
perform_request(self, method, url, params, body, timeout, ignore, 
headers)
    184         if not (200 <= response.status < 300) and 
response.status not in ignore:
    185             self.log_request_fail(method, full_url, url, 
body, duration, response.status, raw_data)
--> 186             self._raise_error(response.status, raw_data)
    187 
    188         self.log_request_success(method, full_url, url, 
body, response.status,

~/anaconda3/lib/python3.7/site- 
packages/elasticsearch/connection/base.py in _raise_error(self, 
status_code, raw_data)
    123             logger.warning('Undecodable raw error response 
from server: %s', err)
    124 
--> 125         raise HTTP_EXCEPTIONS.get(status_code, 
TransportError)(status_code, error_message, additional_info)
    126 
    127 

RequestError: RequestError(400, 'parsing_exception', 'no [query] 
registered for [query]')

Кто-нибудь может мне помочь, пожалуйста?

спасибо

1 Ответ

0 голосов
/ 26 декабря 2018

Не могу проверить прямо здесь, но почти уверен, что вам нужно удалить второй запрос.Подскажите пожалуйста, если работает.

request_body = {
  "query": {
    "bool": {
      "must": [
        {
            "match": {
               "text.phonetic": {
                "query": "Meier"
              }
            }
        }],
     "should" : [
        {
          "fuzzy": {
            "text": {
              "value": "Meier",
              "fuzziness": 2
            }
          }
        }
      ]
    }
  },
  "size" : 15
}
...