2014-05-14 12 views
1

나는 Elastic Search에서 동적 템플릿을 정의하여 번역을 위해 현재 정의되지 않은 속성에 대한 분석기를 자동으로 설정하려고합니다.ElasticSearch Dynamic Templates는 어떻게 정의합니까?

예.

PUT /cl 
{ 
    "mappings" : { 
     "titles" : { 
      "properties" : { 
       "id" : { 
        "type" : "integer", 
        "index" : "not_analyzed" 
       }, 
       "lang" : { 
        "type" : "object", 
        "properties" : { 
         "en" : { 
          "type" : "object", 
          "properties" : { 
           "title" : { 
             "type" : "string", 
             "index" : "analyzed", 
             "analyzer" : "english" 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

예를 들어, 예상대로 lang.en.title 줄기 : 다음은 내가 영어 분석기를 사용하는 lang.en.title을 설정하는 것입니다있는, 원하는 것을 정확하게 수행

GET /cl/_analyze?field=lang.en.title&text=knocked 

{ 
    "tokens": [ 
     { 
     "token": "knock", 
     "start_offset": 0, 
     "end_offset": 7, 
     "type": "<ALPHANUM>", 
     "position": 1 
     } 
    ] 
} 

하지만 난이 작업을 얻이 수없는 것 내가 동적 템플릿 어떤을 ​​사용하여 영어 분석기를 사용하는 lang.en 이후의 모든 문자열 속성을 설정 할 노력하고있어 ...

PUT /cl 
{ 
    "mappings" : { 
     "titles" : { 
      "dynamic_templates" : [{ 
       "lang_en" : { 
        "path_match" : "lang.en.*", 
        "mapping" : { 
         "type" : "string", 
         "index" : "analyzed", 
         "analyzer" : "english" 
        } 
       } 
      }],`enter code here` 
      "properties" : { 
       "id" : { 
        "type" : "integer", 
        "index" : "not_analyzed" 
       }, 
       "lang" : { 
        "type" : "object" 
       } 
      } 
     } 
    } 
} 

GET /cl/_analyze?field=lang.en.title&text=knocked 

{ 
    "tokens": [ 
     { 
     "token": "knocked", 
     "start_offset": 0, 
     "end_offset": 7, 
     "type": "<ALPHANUM>", 
     "position": 1 
     } 
    ] 
} 

내가 무엇을 놓치고 - 원하는대로

영어 분석기 lang.en.title으로 적용되지 않고는 막아야되지 않는 이유는 무엇입니까? :)

답변

3

동적 템플릿이 올바르게 정의되었습니다. 문제는 동적 템플릿이 적절한 매핑을 적용하기 전에 lang.en.title 필드가있는 문서의 색인을 생성해야한다는 것입니다. 위에서 정의한 동일한 동적 매핑을 로컬에서 실행했으며 동일한 결과를 얻었습니다.

그러나 색인에 단일 문서를 추가했습니다.

POST /cl/titles/1 
{ 
    "lang.en.title": "Knocked out" 
} 

문서를 추가 한 후, 나는 다시 분석기를 실행하고 나는 예상되는 출력을 가지고 :

가에 대해 정의 된 매핑 템플릿을 실행 할 수 있도록 인덱스가 문서에 삽입 한 필요가
GET /cl/_analyze?field=lang.en.title&text=knocked 

{ 
    "tokens": [ 
     { 
     "token": "knock", 
     "start_offset": 0, 
     "end_offset": 7, 
     "type": "<ALPHANUM>", 
     "position": 1 
     } 
    ] 
} 

삽입 된 필드. 해당 필드가 인덱스에 존재하고 동적 매핑이 적용되면 _analyze API 호출이 예상대로 실행됩니다.

+0

대단히 감사합니다. :) –