2013-10-10 4 views
0

나는 elasticsearch를 처음 사용하여 동의어를 구성하려고하지만 예상대로 작동하지 않습니다.elasticsearch mutiple word synonms가 작동하지 않음

내 필드 1)에 기술적 리드, 모듈 리드, 소프트웨어 엔지니어, 그때는 "기술 팀장"또는 "TL" 을 retun해야 TL 검색하면 내가 원하는

수석 소프트웨어 엔지니어의 데이터를 다음 한 리드가 인덱스 tme에서 토큰 화되기 때문에 "기술 리드"와 "모듈 리드"가 반환됩니다.

정확한 설정으로이 문제를 해결할 수 있도록 도와 주시겠습니까?

나는 색인 시간과 검색 시간 토큰 화를 보았지만 그것을 이해할 수는 없다.

synonyms.txt :

TL, TL => 기술 리드

SE, SE => 소프트웨어 엔지니어

SSE => 소프트웨어 엔지니어

매핑 파일 :

{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "analyzer": { 
      "synonym": { 
      "tokenizer": "whitespace", 
      "filter": [ 
       "synonym" 
      ] 
      } 
     }, 
     "filter": { 
      "synonym": { 
      "type": "synonym", 
      "synonyms_path": "synonyms.txt" 
      } 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "tweet": { 
     "properties": { 
     "Domain": { 
      "type": "string", 
      "analyzer": "synonym" 
     }, 
     "Designation": { 
      "analyzer": "synonym", 
      "type": "string" 
     }, 
     "City": { 
      "type": "string", 
      "analyzer": "synonym" 
     } 
     } 
    } 
    } 
} 

답변

0

토큰이 여기에 동일하므로 해당 부분이 아래에 있습니다. 당신이해야 할 일은 모두가 아니라 모든 단어에 매치되는 것처럼 보이는 "or"대신에 "AND"매치를하는 것입니다.

체크 아웃 토큰 :

localhost:9200/test/_analyze?analyzer=synonym&text=technical lead 
localhost:9200/test/_analyze?analyzer=synonym&text=tl 

그리고 쿼리

{ 
    "query": { 
     "match": { 
     "domain": { 
      "query": "tl", 
      "operator": "and" 
     } 
     } 
    } 
} 

는 일반적으로 당신은 당신의 검색 및 색인 분석기는 동일하게합니다. 그러나 이것이 바람직하지 않은 많은 고급 예제가 있습니다. 그러나 동의어가있는 경우 확장 기능이 켜져있을 때 동의어를 사용하지 않으려 고합니다. ie tl, technical lead

그러나 동의어의 유형을 사용하고 있기 때문에 모든 단어가 모든 단어에 대해 일련의 토큰을 만드는 대신 모든 단어가 오른쪽의 단어로 변환되기 때문에 이것은 중요하지 않습니다. 쉼표 사이.

관련 문제