2017-02-14 3 views
0

Я использую основную библиотеку elasticsearch в питон 3.Как избежать дефиса в Python elasticsearch

У меня есть запрос:

query = { 
     "query": { 
      "bool": { 
       "must": [{ "term": {"hostname": '"hal-pc"' } }] 
      } 
     } 
    } 

То, что я называю с: page = es.search(index = index_name, body=query, search_type='scan', scroll='2m')

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

+0

Является ли поле 'hostname' проанализированным в сопоставлении elasticsearch? –

+0

Я не знаю, что это значит - я не поддерживаю ES. У меня есть доступ к кибане, и он появляется как текстовое поле, если это помогает. –

ответ

1

Если поле hostname проанализировано во время сопоставления, elasticsearch не сохраняет значение поля как есть. Вместо этого он хранит «hal-pc» в виде двух отдельных терминов: «hal» и «pc». Таким образом, документ не может быть получен при поиске «hal-pc» с использованием фильтра term.

Вы можете найти «hal-pc» с помощью запроса Match, чтобы получить необходимый результат. Или, сделав поле hostname полем не проанализированным и используя term запрос как есть.

{ 
    "query": { 
     "match" : { 
      "hostname": "hal-pc" 
     } 
    } 
} 

Но, это может также вернуть документы, где имя хоста просто «hal» или просто «pc».

+0

Я не достаточно знаком с ES, чтобы понять ваш ответ. Можете ли вы предоставить пример «Match» как пример? И как бы я не стал анализировать поле? –

+0

Спасибо за редактирование. Если у меня есть несколько имен хостов, таких как «hal-pc», «abc-pc», «foo-pc», это даст мне только «hal-pc»? и я могу комбинировать это с другими запросами 'bool', имея' {"query": {"bool": {stuff}, "match": {stuff in your post}}} 'right? –

+0

Проверьте это: https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_query_with_text –

 Смежные вопросы

  • Нет связанных вопросов^_^