2016-08-09 6 views
1

TLDR : 매핑에 not_analyzed라고 표시된 경우에도 일부 필드는 분석됩니다.매핑에서 not_analyzed가 무시됩니다.

데이터 세트가 여러 개 있습니다. 세트마다 포함 된 날짜를 기준으로 Elasticsearch 색인으로 전송됩니다 (색인 이름은 25012016입니다). 일부 세트는 동일한 날짜 및 동일한 색인을 갖습니다.

나는 ES하는 매핑을 보내려면 다음 펄 명령을 사용

print `curl -s -XPUT "http://$ELASTIC_SEARCH_URL/$currentIndexName?pretty" -d ' $mapping'`

$ currentIndexName와 $ 매핑은 각각 몇 함께 index-25012016 추천하고

{ 
    "mappings": { 
     "myMappingType": { 
      "properties": { 
       "present": { 
        "type":"boolean" 
       }, 
       "records": { 
        "type":"integer" 
       }, 
       "batchID": { 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "version": { 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "date": { 
        "type":"date", 
        "format":"yyyy-MM-dd" 
       }, 
       "packageCreationDate": { 
        "type":"date", 
        "format":"MM/dd/yyyy-HH:mm" 
       } 
      } 
     } 
    } 
} 

보이는 문자열

전지. 이 명령은 이전에 이미 완료 한 $ currentIndexName을 제외한 모든 세트에 대해 반복됩니다. 명령이 실행되면 , ES의 대답은 그때 $ 출력 _는 JSON 파일의 이름입니다 `curl -s -XPOST "$ELASTIC_SEARCH_URL/$currentIndexName/_bulk?pretty" --data-binary \@$outputFileName`; 와 ES에 데이터를 보내,이 매핑 ​​단계가 생략 또는 달성했다 여부

{ 
    "acknowledged" : true 
} 

입니다.

문제는 not_analyzed를 Kibana/Settings/Indices에서 지정하더라도 문자열 필드는 분석되고 색인 처리 된 것으로 표시되어 색인이 필요한 위치에 표시됩니다. 따라서 버전 필드는 모두 ("3.2.506 64 비트") 동일하므로 파이 차트에는 a 대신에 "3.2.506", "64"및 "bit"의 세 개의 동일한 조각이 표시됩니다 전체 unsliced ​​"3.2.506 64 비트"파이. 그러나 부울, 숫자, 날짜 필드 및 메타 필드는 분석되지 않습니다.

키바 나가의 색인 패턴은 모든 색인 (색인 - *)과 일치하며 시간 기반 이벤트 필드로 날짜를 사용합니다. 데이터를 보낸 후에 인덱스 패턴을 다시 만들려고했지만 아무 것도 변경하지 않습니다. Windows 7이고 logstash를 사용하지 않습니다.

편집 :

Remove data 
for each set in allSets 
    mapping (if not already mapped in a previous iteration) 
    send data to ES 

답변

1

매핑 : 나는 순간에 많은 테스트를 할 수 있기 때문에, 스크립트가 시작할 때마다, 나는 print `curl -s -XDELETE "http://localhost:9200/index-*?pretty`; 와 세트 반복하기 전에 데이터를 제거 따라서 스크립트 같은 보이는 기존 데이터는 업데이트 할 수 없습니다. 올바른 매핑으로 새 색인을 작성하고 문서를 해당 색인에 다시 색인화해야합니다. https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#_updating_existing_mappings

당신은 자동으로 새로 생성 된 인덱스에 매핑을 적용하는 인덱스 템플릿을 사용할 수 있습니다 : 여기 ES의 문서에 대한 링크입니다 실제로 데이터를 삭제 :

+0

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html 감사합니다, 당신은 생각 나게 나는 중요한 뭔가를 쓰는 것을 잊었다 과정을 시작하기 전에 (편집 된 답변 참조). 따라서 매핑 단계에서 색인을 생성하지 않고 데이터를 전송합니까? – LogicalKip

+0

스크립트가 완료된 후 http : // localhost : 9200/your-index-name? pretty = true로 GET 요청을 수행하면 ES에서 색인에 대한 올바른 매핑을 반환합니까? 그렇다면 인덱스 패턴에 대해 키바나의 필드 목록을 새로 고칩니다. 이것이 작동하지 않는다면 Kibana 색인 패턴과 일치하는 이전 매핑이있는 오래된 색인이있을 수 있습니까? 어쨌든 인덱스 생성시 올바른 매핑을 적용하고 직접 매핑을 수정할 필요가 없으므로 위에서 언급 한 인덱스 템플릿을 살펴보십시오. – const314

+0

아직도 작동하지 않는 이유는 확실하지 않지만 자동 인덱스 템플릿을 사용하면 트릭을 수행하게됩니다. 고맙습니다. – LogicalKip

관련 문제