elasticsearch mapping 필드

2529 단어 elasticsearch
ES는 같은 필드에 두 가지 다른 유형을 허용합니다. 예를 들어 한 필드에 keyword 유형을 가지고 집합과 정렬을 할 수도 있고, text 를 가지고 전체 텍스트 검색을 할 수도 있습니다.예를 들면 다음과 같습니다.
PUT my_index
{
  "mappings": {
    "type": {
      "properties": {
        "city": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}

PUT my_index/type/1
{
  "city": "New York"
}

PUT my_index/_doc/2
{
  "city": "York"
}

GET my_index/_search
{
  "query": {
    "match": {
      "city": "york" 
    }
  },
  "sort": {
    "city.raw": "asc" 
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.raw" 
      }
    }
  }
}

이렇게 city 필드에는 두 가지 속성이 있습니다. 각각 textkeyword, city 필드는 전문 검색, city.raw 정렬과 집합으로 사용할 수 있습니다.그 밖에 서로 다른 analyzer 를 사용할 수 있다. 예를 들어 우리는 standard analyzer 을 사용하여 단어를 구분할 수 있고, 동시에 english analyzer 를 사용하여 단어를 어근으로 바꿀 수 있다.예:
PUT my_index
{
  "mappings": {
    "properties": {
      "text": { 
        "type": "text", //text  `standard` analyzer
        "fields": {
          "english": { 
            "type":     "text",
            "analyzer": "english" // text.english `english ` analyzer
          }
        }
      }
    }
  }
}

PUT my_index/_doc/1
{ "text": "quick brown fox" } 

PUT my_index/_doc/2
{ "text": "quick brown foxes" } 

GET my_index/_search
{
  "query": {
    "multi_match": {
      "query": "quick brown foxes",
      "fields": [ 
        "text",
        "text.english"  
      ],  // text and text.english fields and combine the scores
      "type": "most_fields" 
    }
  }
}

텍스트 필드는 첫 번째 데이터fox와 두 번째 데이터foxes를 포함하고, text.english 필드는 두 번째 데이터fox를 포함한다. 왜냐하면 두 번째 데이터foxes의 어근은 fox이기 때문이다.또한 조회 문장은 standard analyzerenglish analyzer에 의해 해석되고 어근은 foxesfox를 포함하는 문서를 받아들여 더 많은 문서와 일치할 수 있다.검색 어근을 통해 문서의 관련성을 높일 수 있다.

좋은 웹페이지 즐겨찾기