2014-12-18 3 views
0

edge-ngram 기술을 사용하여 자동 완성을 만들고 싶다고 가정 해 봅니다 (완료 방법은 나에게 좋은 옵션이 아닙니다). 나는 "우리", "우리", "우리", "우리", "우리 팔", "우리 군대"에 의해 "우리 군대"의 색인을 달기를 원합니다.토큰 화되지 않은 필드에서 동의어 토큰 필터 사용

문제는 - 동의어 목록도 있습니다. 예를 들어 "us"는 "usa"의 동의어입니다. 어떻게하면 "우리 군대"를 "우리"와 "군대"로 나누고, 동의어를 찾아 다시 돌려 놓을 수 있습니까?

{ 
    "analysis": { 
     "filter": { 
      "ngram_prefix": { 
       "type":  "edge_ngram", 
       "min_gram": 1, 
       "max_gram": 20 
      }, 
      "custom_synonyms": { 
       "type": "synonym", 
       "tokenizer": "standard", 
       "synonyms_path": "/my/synonym/path/synonyms.txt", 
       "ignore_case": True 
      } 
     }, 
     "analyzer": { 
      "synonym_ngram": { 
       "type":  "custom", 
       "tokenizer": "keyword", 
       "filter": [ 
        "custom_synonyms", 
        "lowercase", 
        "ngram_prefix", 
       ], 
       "char_filter": [], 
      } 
     } 
    } 
} 

운이 없으면 :

나는이 같은 일을 시도했다.

토큰을 연결하는 방법이 있습니까? 그렇게하면 항목을 토큰으로 분할하고 동의어를 찾고 토큰을 다시 연결시킬 수 있습니까?

아마도 match_phrase를 사용하여 첫 번째 토큰이 위치 0인지 확인해야할까요?

답변

0

keyword 토크 나이저가 있기 때문에 그렇게 할 수 없습니다. 이 단어는 동의어가 용어별로 식별되도록 텍스트를 분할하지 않습니다. 때문에 귀하의 term 전체 텍스트입니다. 따라서 동의어를 "us army,usa army,u s a army,united states of america army"과 같이 정의하지 않으면 다른 방법이 표시되지 않습니다.

"my_synonym_filter": { 
     "tokenizer": "keyword", 
     "type": "synonym", 
     "synonyms": [ 
     "us army,usa army,u s a army,united states of america army" 
     ] 
    } 
    }