2017-02-14 1 views
0

을 elasticsearch :3.</p> <p>내가 쿼리를 가지고 내가 파이썬에서 기본 elasticsearch 라이브러리를 사용하고

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

내가 함께 부르는 : page = es.search(index = index_name, body=query, search_type='scan', scroll='2m')

그러나 나는 어떤 결과도 얻지 못하고있다. 내 쿼리가 작동하는지 알 수 있도록 다른 필드를 쿼리 할 수 ​​있지만 값에 하이픈이있는 필드를 검색 할 때 아무 것도 찾을 수 없습니다. 이 캐릭터를 어떻게 피할 수 있습니까? 일반적인 ES 쿼리를 사용하면 특정 방식으로 특정 문자에 응답하도록 ES를 구성하는 메시지를 보낼 수 있지만 파이썬에서는이를 수행하는 방법을 알지 못합니다.

+0

'호스트 이름'필드가 elasticsearch 매핑에서 분석 되었습니까? –

+0

그 의미가 무엇인지 모르겠다. 나는 ES를 유지하지 않는다. 나는 kibana에 접근 할 수 있으며, 도움이된다면 텍스트 필드로 나타납니다. –

답변

1

hostname 필드가 매핑에서 분석되는 경우 elasticsearch는 필드 값을 그대로 저장하지 않습니다. 대신 "hal-pc"를 "hal"과 "pc"라는 두 개의 별도 용어로 저장합니다. 따라서 term 필터를 사용하여 "hal-pc"를 검색 할 때 문서를 가져올 수 없습니다.

Match 쿼리를 사용하여 "hal-pc"를 검색하여 필요한 결과를 얻을 수 있습니다. 또는 필드 hostname을 분석하지 않고 term 쿼리를 그대로 사용합니다.

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

그러나, 호스트 이름이 아니라 그냥 "복도"하거나 "PC"이고 이것은 또한 문서를 반환 할 수 있습니다.

+0

답변을 이해하는 데 ES에 익숙하지 않습니다. 예제처럼 'Match'쿼리 샘플을 제공 할 수 있습니까? 그리고 어떻게 현장을 분석하지 않겠습니까? –

+0

편집 해 주셔서 감사합니다. "hal-pc", "abc-pc", "foo-pc"와 같은 여러 호스트 이름을 사용하면 "hal-pc"권한 만 부여하게됩니까? 나는'{ "query": { "bool": {stuff}, "match": {당신의 게시물에있는 물건}}}'함으로써 다른 bool 쿼리와 결합 할 수 있습니다. –

+0

다음을 확인하십시오 : https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_query_with_text –

관련 문제