2014-04-24 2 views
1

여러 언어로 문서를 색인화하고 있습니다. 알고있는 한 _analyzer 매핑을 사용하여 문서 필드 중 하나에서 색인 타임에 각 문서에 사용할 분석기를 지정할 수 있습니다.다국어 탄성 검색 인덱스

는 본질적으로 http://www.elasticsearch.org/guide/reference/mapping/analyzer-field.html

, 프랑스 문서 동안은 언어 필드가 "프랑스어"는 프랑스어에 따른 규칙을 적용 프랑스 중지 단어를 제거하는 데 필요한 Elasticsearch을 나타냅니다 해당 설정이 참조하십시오.

이제 실제로 처리하기 전에 Elasticsearch가 동일한 형태소 분석 규칙을 쿼리에 적용 할 수 있도록 쿼리 시간에 분석기를 지정해야합니까? 그렇다면 전체 색인을 검색 할 수 있기를 원하기 때문에 조금은 어리 석다. 결국 다른 사람들보다 특정 언어의 문서를 선호하는 "should"절을 제공한다.

내가 모르는 것은 Elasticsearch가 지금까지 색인에서 사용 된 모든 분석기를 적용하여 여러 개의 쿼리를 작성하는지 여부입니다. 그렇지 않다면 내가 보는 유일한 해결책은 언어에 따라 문서를 여러 유형으로 분리 한 다음 여러 개의 쿼리를 동시에 실행하고 클라이언트에서 결과를 병합하고 점수에 따라 정렬하는 일종의 싱크 기능을 사용하는 것입니다. 그러나 (네트워크 라운드 트립을 제한하기 위해) 대량 쿼리를 보낼 수는 있지만 그 솔루션은 분명히 최적이 아닙니다.

의견이 있으십니까?

답변

1

당신은 인덱싱 및 검색을 위해 별도의 분석기를 정의 할 수 있습니다 : 당신은 또한 인덱스 설정에서 기본 분석기를 지정할 수 있습니다

"my_field":{ 
    "type":"string", 
    "index_analyzer":"my_index_analyzer", 
    "search_analyzer":"my_search_analyzer" 
} 

- 여기 실생활의 예는 다음과 같습니다

"settings":{ 
    "number_of_shards":5, 
    "number_of_replicas":1, 
    "analysis":{ 
     "analyzer":{ 
      "default_index":{ 
       "type":"custom", 
       "tokenizer":"whitespace", 
       "filter":[ 
        "trim", 
        "lowercase", 
        "asciifolding" 
       ] 
      }, 
      "default_search":{ 
       "type":"custom", 
       "tokenizer":"keyword", 
       "filter":[ 
        "trim", 
        "lowercase", 
        "asciifolding" 
       ] 
      } 
     } 
    } 
} 

이 방법을 사용하면 돈 _analyzer 필드를 명시 적으로 지정해야합니다.