2016-08-05 8 views
0

영어 분석기를 기본 분석기로 지정하는 색인에서 불용 기호를 업데이트해야하는 문제가 발생했습니다. 일반적으로, 분석기는 인덱스에 대한 설정에서 지정됩니다Elasticsearch를 사용하여 분석기를 업데이트하면 구성원 필드가 생성됩니다.

curl -XPOST "http://localhost:9200/twitter/_close" && \ 
curl -XPUT "http://localhost:9200/twitter/_settings" -d' 
{ 
    "analysis": { 
     "analyzer": { 
      "default": { 
       "type": "english", 
       "stopwords": "_none_" 
      } 
     } 
    } 
}' && \ 
curl -XPOST "http://localhost:9200/twitter/_open" 

후 : 분석기를 업데이트하려면 그래서, 분석기는 <index name>.settings.index.analysis.analyzer

에 있습니다

{ 
    "twitter": { 
    "settings": { 
     "index": { 
     "creation_date": "1469465586110", 
     "analysis": { 
      "filter": { 
      "lowercaseFilter": { 
       "type": "lowercase" 
      } 
      }, 
      "analyzer": { 
      "default": { 
       "type": "english" 
      }, 
... 

, 나는이 명령을 실행 이 명령을 실행하면서 기본 분석기가 텍스트를 분석하고 모든 불용어를 지키는 지 확인했습니다. 나는 농담 클라이언트를 사용할 때

그러나, 현재 설정은 다음과 같이하고, 분석이 제대로 발생하지 않습니다 (분석 설정은 이제 "회원"속성에서 얼마나 주) :

{ 
    "twitter": { 
    "settings": { 
     "index": { 
     "members": { 
      "analysis": { 
      "analyzer": { 
       "default": { 
       "type": "english", 
       "stopwords": "_none_" 
       }, 

코드를 밟았으며 모든 것이 순서대로되어 있습니다. intellij debug Jest UpdateSettings payload

답변

0

나는 그것을 알아 냈습니다. 실행하여 그래서 :

sudo tcpflow -p -c -i lo0 port 9200 2>/dev/null | grep -oE '.*(GET|POST|PUT|DELETE) .*_dev.*' -A30 

나는 전송 된 된 JSONObject 인 members 필드에 포함 된 것을 볼 수있는 곳 GSON의 JsonObject 저장 자체 내부의 객체. 이 원시 객체를 Jest의 UpdateSettings 빌더에 전달 했으므로 (예 : members 필드를 포함하여) 예상하지 못한 방식으로 직렬화되어 elasticsearch로 전송되었습니다. JsonObject의 toString() 메서드를 호출하고이를 UpdateSettings 빌더

으로 전달하여 문제를 해결했습니다.