2.X/3. Dealing with Human Language

3-1-4. One Language per Document

drscg 2017. 9. 24. 17:47

A single predominant language per document requires a relatively simple setup. Documents from different languages can be stored in separate indices—blogs-enblogs-fr, and so forth—that use the same type and the same fields for each index, just with different analyzers:

document별로 하나의 두드러진 언어가 있으면, 상대적으로 간단한 설정이 요구된다. 서로 다른 언어로 된 document는 개별 indices(blog-enblog-fr 등)에 저장할 수 있다. 이들은 각 index에서 동일한 type, 동일한 field를 사용한다. 다만, analyzer가 다를 뿐이다.

PUT /blogs-en
{
  "mappings": {
    "post": {
      "properties": {
        "title": {
          "type": "string", 
          "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "english" 
            }
}}}}}}

PUT /blogs-fr
{
  "mappings": {
    "post": {
      "properties": {
        "title": {
          "type": "string", 
          "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "french" 
            }
}}}}}}

 

blog-enblog-fr 양쪽 모두는 title field를 포함하고 있는 post 라는 type을 가지고 있다.

 

title.stemmed 라는 하위 field는 언어별로 analyzer를 사용한다.

This approach is clean and flexible. New languages are easy to add—just create a new index—and because each language is completely separate, we don’t suffer from the term-frequency and stemming problems described in Pitfalls of Mixing Languages.

이런 방식은 명확하고 유연하다. 새로운 언어를 추가하기 쉽다. 새로운 index를 생성하면 된다. 그리고, 각 언어가 완벽하게 분리되어 있기 때문에, TF와 Pitfalls of Mixing Languages에서 언급한 형태소 분석 문제로 고생하지 않는다.

The documents of a single language can be queried independently, or queries can target multiple languages by querying multiple indices. We can even specify a preference for particular languages with the indices_boost parameter:

하나의 언어로 된 document는 독립적으로 검색된다. 또는 다수의 indices를 검색함으로써 query는 다중 언어를 목표로 할 수 있다. 심지어, indices_boost 매개변수를 이용하여, 특정 언어에 대한 선호도를 지정할 수 있다.

GET /blogs-*/post/_search 
{
    "query": {
        "multi_match": {
            "query":   "deja vu",
            "fields":  [ "title", "title.stemmed" ] 
            "type":    "most_fields"
        }
    },
    "indices_boost": { 
        "blogs-en": 3,
        "blogs-fr": 2
    }
}

이 검색은 blogs- 로 시작되는 모든 index에서 수행된다.

title.stemmed field는 각 index에 지정된 analyzer로 검색된다.

사용자의 accept-language header가 영어, 그 다음이 프랑스어로 되어 있다면, 그에 따라 각 index의 결과에 가중치를 부여한다. 다른 언어들은 기본 가중치 1 을 가진다.

Foreign Wordsedit

Of course, these documents may contain words or sentences in other languages, and these words are unlikely to be stemmed correctly. With predominant-language documents, this is not usually a major problem. The user will often search for the exact words—for instance, of a quotation from another language—rather than for inflections of a word. Recall can be improved by using techniques explained in Normalizing Tokens.

물론, 이런 document도 다른 언어로 된 단어나 문장을 가질 수 있다. 이런 단어들은 올바른 형태소 분석이 이루어지지 않는다. 두드러진 언어를 가진 document에서, 이것은 일반적으로 심각한 문제가 아니다. 사용자는 일반적으로 변경된 단어보다는 정확한 단어(예를 들면, 다른 언어에서 인용된 단어)를 검색한다. recall은, Normalizing Tokens에서 설명할 기술을 사용하여, 증가될 수 있다.

Perhaps some words like place names should be queryable in the predominant language and in the original language, such as Munich and München. These words are effectively synonyms, which we discuss in Synonyms.

장소의 이름을 나타내는 어떤 단어(Munich 과 München 같은, 뮌헨)는 두드러진 언어와 원래의 언어로 검색이 가능해야 한다. 이 말이, Synonyms에서 이야기할, 효율적인 동의어이다.


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

3-1-2. Configuring Language Analyzers  (0) 2017.09.24
3-1-3. Pitfalls of Mixing Languages  (0) 2017.09.24
3-1-5. One Language per Field  (0) 2017.09.24
3-1-6. Mixed-Language Fields  (0) 2017.09.24
3-2. Identifying Words  (0) 2017.09.24