2017-09-05 5 views
0

Elasticsearch 만 찾는 안타를 추가 ".keyword"로 히트를 찾는Elasticsearch는 ".keyword"로

내가이 수입 Fluentd는 로그 항목의 전체 elasticsearch 5 인스턴스를 쿼리로 끔찍한 시간을 보내고 있습니다를 추가 버전 1.7을 실행하는 이전 elasticsearch 인스턴스. Kibana를 통한 쿼리는 가장 간단한 작업이 자주 만료되며 잠재적 인 성능 문제를 조사하기 위해 어디를 가야할지 완전히 어둡습니다. 인덱스에 대한 elasticsearch 매핑의 샘플링은 I은 다음과 같습니다 질의 해요 : 장소에두고

=> {"@log_name"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"@timestamp"=>{"type"=>"date"}, 
"@version"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"action"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"api"=>{"type"=>"boolean"}, 
"controller"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"db"=>{"type"=>"float"}, 
"duration"=>{"type"=>"float"}, 
"error"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"filtered_params"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"user"=> 
    {"properties"=> 
    {"email"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "snowflake_id"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "snowflake_uid"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "type"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}, 
    ... 

, 나는 인덱스를 조회 할 수 있습니다 뭔가 curl를 사용하여 발견 된 문서의 총 수를 반환하고자 :

0 개의 문서가 있음을 의미합니다. 내 매핑이 데이터를 올바른지 여부를 어떻게 알 수 있습니까 : 나는 user.email.keyword으로 user.email 용어를 대체 할 경우 그러나는 쿼리가

(40)의 total 수 내 주요 질문은 추측 반환? (가져온 데이터의 경우 데이터는 삽입시 삽입 될 때 생성되었으며 이후에 자동으로 생성됩니다.)

답변

2

user.email 필드의 유형은 text입니다. 이 유형의 필드에 인덱싱 할 때 분석기는 소스 값을 하나 이상의 용어로 분할하여 변환합니다. 각 용어는 색인에 저장되어 해당 용어를 검색 할 수 있습니다. 매핑에서 필드 분석기를 지정하지 않으므로 default analyzer이 사용됩니다. 기본 분석에 의한 조건에 출력을 표시하려면, 아마 결과를 찾을 용어 사용자user.email 필드를 검색, 귀하의 예를 다음

curl -s -XGET http://localhost:9200/logstash-2017.08.15/_analyze -d'{"text": "[email protected]"}' | jq . 

호출합니다.

user.email.keyword 하위 필드는 keyword입니다. 이 유형의 필드는 정확한 값으로 만 검색 할 수 있습니다. 즉, 검색 쿼리에 지정된 값이 원본 소스 값과 정확히 일치해야합니다.

+0

아, 와우 - 엄청난 도움이됩니다. ES가 토큰 값으로 만 검색 할 수 있도록 텍스트 필드를 분리한다는 것을 몰랐습니다. 그러나, 나는 여전히 curl -s -XGET 'localhost : 9200/logstash- *'가 시간을 초과하고'curl -s -XGET'을 검색하는 동안 내 색인 전체를 질의하는 속도가 너무 느리다는 것에 여전히 고착되어있다. localhost : 9200/logstash-2017.09 *'는 아닙니다. 구체적인 증거는 아직 없지만 가져 오기 전과 후에 문서를 집계하면 실적에 영향을 미치고있는 것으로 보입니다. – matt

관련 문제