Elasticsearch 확장 단어 후 색인 변경

전편:https://blog.51cto.com/9844951/2473892
단어 확장 도입 문제 해결
일단 효과를 볼게요.
GET /operation/_search
{
  "query": {
    "match": {
      "store_name": " "
    }
  }
}

결과
{
  "took" : 38,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

이때의 분사기는 두 글자에 대한 분사는 다음과 같다.
{
  "tokens" : [
    {
      "token" : " ",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    }
  ]
}

우리의 인덱스는 만들 때 단어가 확장되지 않았기 때문에 인덱스를 만들 때 분사기는 두 글자로 나뉘는데, 이때 분사기는 단어를 한 단어 로 나누어 문서를 검색할 수 없습니다.
해결 방법 1:
먼저 떠오르는 것은 색인을 재구성하는 것이다. 왜냐하면 이때 분사기 사전에는 이미 라는 단어가 있기 때문이다. 그리고 문서를 전량으로 복사해서 새로운 색인에 넣는다. 데이터의 양이 크지 않은 상황에서 신속하게 옮길 수 있기 때문이다. 데이터의 양이 많으면 이렇게 하는 것을 권장하지 않는다. 그러나 일부 문서는 확장할 단어와 관련이 있을 수 있기 때문에 이 방법은 비교적 서툴기 때문에 사용을 권장하지 않는다.
해결 방법 2: 공식 API 인터페이스Elasticsearch를 통해 update_by_query와 관련된 문서를 다시 구분할 수 있음
구체적인 조작은 다음과 같다.
POST /operation/_update_by_query
{
  "query": {
    "bool": {
      "must": [
        {"term": {"store_name": " "}},
        {"term": {"store_name": " "}}
      ]
    }
  }
}

위의 두 조건을 충족해야 문서를 읽어들이고 단어 수정을 할 수 있다는 뜻입니다. 즉, 문서 이름에 이 동시에 포함되어야 단어를 다시 구분할 수 있습니다.
실행 결과
{
  "took" : 240,
  "timed_out" : false,
  "total" : 4,
  "updated" : 4,
  "deleted" : 0,
  "batches" : 1,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}

네 개의 문서가 수정된 것을 볼 수 있다
다시 검색을 통해 품질보증 또는 문서가 없습니다.

좋은 웹페이지 즐겨찾기