2.X/3. Dealing with Human Language

3-6-1. Using Synonyms

drscg 2017. 9. 24. 12:47

Synonyms can replace existing tokens or be added to the token stream by using the synonym token filter:

동의어는 기존의 token을 대체하거나, synonym token filter를 사용하여 token stream에 추가될 수 있다.

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym", 
          "synonyms": [ 
            "british,english",
            "queen,monarch"
          ]
        }
      },
      "analyzer": {
        "my_synonyms": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_synonym_filter" 
          ]
        }
      }
    }
  }
}

먼저, synonym 형태의 token filter를 정의한다.

Formatting Synonyms에서, 동의어의 형식에 대해 이야기하겠다.

그 다음에, my_synonym_filter 를 사용하는 사용자 정의 analyzer를 생성한다.

Tip

Synonyms can be specified inline with the synonyms parameter, or in a synonyms file that must be present on every node in the cluster. The path to the synonyms file should be specified with the synonyms_path parameter, and should be either absolute or relative to the Elasticsearch config directory. See Updating Stopwords for techniques that can be used to refresh the synonyms list.

동의어는 synonyms 매개변수에 inline으로, 또는 cluster내의 모든 node에 synonyms 파일로 지정한다. synonyms 파일의 경로는 synonyms_path 매개변수에 절대 경로 혹은 Elasticsearch config 디렉토리의 상대 경로로 지정한다. 동의어 목록을 갱신하는데 사용되는 기술은 Updating Stopwords를 참고하자.

Testing our analyzer with the analyze API shows the following:

analyze API로 analyzer를 테스트하면, 아래 결과를 보여준다.

GET /my_index/_analyze
{
  "analyzer" : "my_synonyms",
  "text" : "Elizabeth is the English queen"
}
Pos 1: (elizabeth)
Pos 2: (is)
Pos 3: (the)
Pos 4: (british,english) 
Pos 5: (queen,monarch) 

 

모든 동의어는 원래 단어와 동일한 위치를 갖는다.

A document like this will match queries for any of the following: English queenBritish queenEnglish monarch, or British monarch. Even a phrase query will work, because the position of each term has been preserved.

이런 document는 English queenBritish queenEnglish monarch, 또는 British monarch 에 대한 query에 모두 일치한다. 각 단어의 위치가 유지되기 때문에, phrase query에서도 잘 동작한다.

Tip

Using the same synonym token filter at both index time and search time is redundant.If, at index time, we replace English with the two terms english and british, then at search time we need to search for only one of those terms. Alternatively, if we don’t use synonyms at index time, then at search time, we would need to convert a query for English into a query for english OR british.

색인 시와 검색 시 모두에, 동일한 synonym token filter를 사용하는 것은 중복이다. 색인 시에 English 를 두 개의 단어 english 와 british 로 대체했다면, 검색 시에는 그들 중의 하나로만 검색하면 된다. 그렇지 않고, 색인 시에 동의어를 사용하지 않았다면, 검색 시에 English에 대한 query를 english OR british 에 대한 query로 변경해야 한다.

Whether to do synonym expansion at search or index time can be a difficult choice. We will explore the options more in Expand or contract.

색인 시나 검색 시 중 동의어 확장을 언제 할 것인가 하는 것은 어려운 선택이다. Expand or contract에서 더 많은 옵션에 대해 이야기해 보자.


'2.X > 3. Dealing with Human Language' 카테고리의 다른 글

3-5-7. Stopwords and Relevance  (0) 2017.09.24
3-6. Synonyms  (0) 2017.09.24
3-6-2. Formatting Synonyms  (0) 2017.09.24
3-6-3. Expand or contract  (0) 2017.09.24
3-6-4. Synonyms and The Analysis Chain  (0) 2017.09.24