2016-06-01 2 views
1

간단히 기능의 "이름"을 저장하는 Elasticsearch 색인이 필요합니다. 소리 나는 검색어를 입력하고 이전에 스타일을 미리 입력 할 수 있기를 원합니다. 두 개의 분석기와 두 개의 필터로 하나의 색인을 생성 할 수있을 것이라고 생각합니다. 각 분석기는 필터 중 하나를 사용할 수 있습니다. 그러나 나는 이것을 할 수 없을 것 같습니다.Elasticsearch 색인 설정에 필터를 여러 개 사용할 수 있습니까?

말, 내가 HTTP 400을 얻을

http://hostname:9200/index/type 

:

{ 
    "settings": { 
     "number_of_shards": 1, 
     "analysis": { 
      "analyzer": { 
       "autocomplete_analyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": ["standard", "lowercase", "ngram"] 
       } 
      }, 
      "analyzer": { 
       "phonetic_analyzer": { 
        "tokenizer": "standard", 
        "filter": "double_metaphone_filter" 
       } 
      }, 
      "filter": { 
       "double_metaphone_filter": { 
        "type": "phonetic", 
        "encoder": "double_metaphone" 
       } 
      }, 
      "filter": { 
       "ngram": { 
        "type": "ngram", 
        "min_gram": 2, 
        "max_gram": 15 
       } 
      } 
     } 
    } 
} 

을 나는이 설정 인덱스를 만들려고하면 다음과 같습니다

내가 사용하려고 해요 인덱스 설정 JSON입니다
Custom Analyzer [phonetic_analyzer] failed to find filter under name [double_metaphone_filter] 

잘못 이해하지 말고, 나는 그 문장이 의미하는 바를 완전히 깨닫습니다. 나는 보았고 잘못된 쉼표 나 따옴표를 찾았지만 아무 것도 볼 수 없다. 그렇지 않으면 모든 것이 존재하고 올바르게 형식화됩니다.

분석기을 삭제하면 자동 완성 분석기와 ngram 필터에서만 색인이 생성됩니다.

필터을 삭제하면 음 성 분석기 및 소리 나는 필터 만 사용하여 색인이 생성되지만 사용됩니다.

인덱스 당 하나의 분석기 또는 인덱스 당 하나의 분석기와 같은 ES의 기본 개념이 누락 된 느낌이 들거나 다른 논리 종속성을 올바르게 설정해야합니다. 논리적 다이어그램 또는 Elasticsearch 인프라의 API 사양을 완벽하게 유지해야합니다. 즉, 모든 인덱스에는 분석기 1 개, 필터 1 개만있을 수 있으며 쿼리에는 bool, match 등이 필요합니다. 그러나 유니콘은 존재하지 않는 것 같습니다.

각 기능을 수행하는 방법에 대한 설명서, 블로그 게시물 등이 많이 있지만 색인에는 분석기와 필터가 각각 하나씩 있습니다. 나는 하나의 인덱스에서 (범위를 벗어난 이유로)이 이중 기능을 수행하고 싶다.

누군가 도움이나 조언을 제공해 줄 수 있습니까?

답변

3

설정 개체에 맞는 서식이 없습니다. analyzer 또는 filter 키를 두 개 사용할 수 없습니다.이 설정 맵 개체에는 키당 하나의 값만있을 수 있습니다. 필터 목록을 제공하면 잘 작동하는 것 같습니다. 인덱스 개체를 만들 때 두 번째 키가 첫 번째 개체를 재정의했습니다.

여기 봐 :이 작동 확인을 위해 플러그인을 다운로드

"settings": { 
    "number_of_shards": 1, 
    "analysis": { 
     "filter": { 
      "double_metaphone_filter": { 
       "type": "phonetic", 
       "encoder": "double_metaphone" 
      }, 
      "ngram": { 
       "type": "ngram", 
       "min_gram": 2, 
       "max_gram": 15 
      } 
     }, 
     "analyzer": { 
      "autocomplete_analyzer": { 
       "type": "custom", 
       "tokenizer": "standard", 
       "filter": ["standard", "lowercase", "ngram"] 
      }, 
      "phonetic_analyzer": { 
       "tokenizer": "standard", 
       "filter": "double_metaphone_filter" 
      } 
     } 
    } 
} 

. 이제 페이로드로 _analyze enpoint에이를 테스트 할 수 있습니다

{ 
    "analyzer":"autocomplete_analyzer", 
    "text":"Jonnie Smythe" 
} 
+0

감사합니다! 이것은 효과가 있었다. – user6411097

관련 문제