2017-09-26 19 views
1

ElasticSearch에 몇 가지 문제가 있습니다.마지막 부분 문자열을 토큰으로 가져 오도록 ElasticSearch 분석기/토큰 화/필터를 어떻게 설정합니까?

구조 : '→'로 분리 된 중첩 키워드. 예 : →Animal→Mammal→Dog. 임의의 수의 중첩 된 레벨이있을 수 있습니다.

내가 필요한 것은 analyzer/tokenizer/filter으로 설정하는 것입니다. ES 가장 깊은 키워드로만 검색하십시오. 예를 들어, →Animal→Mammal→Dog은 Animal로 →Animal - →Animal→Mammal -으로 Mammal로 분석해야합니다.

나는 PathHierarchy 토크 나이저를 시도했지만, 내가 필요한 것은 아닙니다. PathHierarchy 토크 나이저는 → Animal → Mammal → Dog → Animal → Animal → Mammal → Animal → Mammal → Dog.

답변

0

정규식을 사용하여 토큰을 생성하는 Pattern Tokenizer을 사용할 수 있습니다. 그래서처럼 _analyze 엔드 포인트와 ^(?:.*→)(.+)$

테스트 그것을 :

나는이 정규식을 사용

{ 
    "tokens": [ 
     { 
      "token": "Dog", 
      "start_offset": 15, 
      "end_offset": 18, 
      "type": "word", 
      "position": 0 
     } 
    ] 
} 

그것은 항상 가치가있다 :

POST /_analyze 
{ 
    "tokenizer": { 
     "type": "pattern", 
     "pattern": "^(?:.*→)(.+)$", 
     "group": 1 
    }, 
    "text": "→Animal→Mammal→Dog" 
} 

는 다음과 같은 결과를 생산 잘못 작성된 정규 표현식이 성능 문제를 일으킬 수 있다는 것을 반복하므로 신중하게 진행하십시오. 나는 잘 수행하는 정규식을 썼다고 믿지만 아무런 보장도하지 않습니다.

계속 진행하려면 인덱스 설정에 Custom Analyzer을 설정하고 문서 매핑에 분석기를 사용하는 입력란이 있는지 확인해야합니다.