ElasticSearch 검색 시 term 및 match 분사 여부에 따른 대소문자 문제

2292 단어 ElasticSearch
환경: ElasticSearch6.5.4 버전, kibana6.5.4 버전
우선 키바나의 Dev Tools에 몇 개의 데이터를 삽입하고 맵핑이 정해지지 않으면 기본 동적 맵을 표시합니다
POST /stulib/items/_bulk
{"index": {"_id": 1}}
{"age": 11,"stuID": "STUID10010"}
{"index": {"_id": 2}}
{"age": 12,"stuID": "STUID10011"}

매핑 보기:
GET /stulib/_mapping

결과:
{
  "stulib" : {
    "mappings" : {
      "items" : {
        "properties" : {
          "age" : {
            "type" : "long"
          },
          "stuID" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
 }}}}}}}}

stuID가 분사를 사용한 것을 관찰할 수 있습니다. 이것은 stuID 값이 대문자가 있으면 소문자로 변환된다는 것을 의미합니다
1.term은 검색어를 구분하여 분석하지 않습니다(대문자는 대문자로 유지됨). 문서의 stuID 값과 구분된 소문자(STUID->stuid)가 일치하지 않기 때문에 내용을 찾을 수 없습니다
GET /stulib/items/_search
{ 
  "query": {
    "bool": {
      "filter": [
        {"term": {"stuID": "STUID10010" }}
        ]
    }
  }
}

결과가 비어 있음
2. match는 먼저 검색어를 구분하고 단어를 구분한 후 대문자로 소문자(STUID->stuid), 문서에 있는 stuID의 값으로 단어를 구분한 후의 소문자(STUID->stuid)와 일치하기 때문에 결과를 검색할 수 있습니다
GET /stulib/items/_search
{
  "query":{
    "bool":{
      "filter": [
        {"match":  {"stuID": "STUID10010"}}
      ]
    }
  }
}

결과를 알아낼 수 있다
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.0,
    "hits" : [
      {
        "_index" : "stulib",
        "_type" : "items",
        "_id" : "1",
        "_score" : 0.0,
        "_source" : {
          "age" : 11,
          "stuID" : "STUID10010"
        }
      }
    ]
  }
}

좋은 웹페이지 즐겨찾기