position_increment_gap 매핑 파라미터

position_increment_gap 매핑 파라미터

position_increment_gap 매핑 파라미터는 인덱싱 중에 다중 값(multi-valued) 필드의 토큰 사이 위치 거리를 정의해요. 이 값은 같은 필드의 여러 값을 가로질러 검색할 때 match_phrase 쿼리와 span 쿼리가 동작하는 방식에 영향을 줘요.

기본적으로 다중 값 필드의 각 새 값은 이전 값과 100 포지션만큼 떨어져 있는 것으로 간주돼요. 이렇게 하면 서로 다른 필드 값을 가로질러 이어질 수 있는 구문을 검색할 때 오탐(false positive)이 발생하는 것을 방지할 수 있어요.

출처: 문서

본문

position increment gap 설정하기

tags 필드가 text 타입인 articles 인덱스를 만들고 position_increment_gap을 0으로 설정하려면 다음 요청을 사용해요:

PUT /articles
{
  "mappings": {
    "properties": {
      "tags": {
        "type": "text",
        "position_increment_gap": 0
      }
    }
  }
}

다중 값 필드 인덱싱하기

tags 필드가 여러 값을 포함하는 문서를 인덱스하려면 다음 요청을 사용해요:

PUT /articles/_doc/1
{
  "tags": ["machine", "learning"]
}

match_phrase 쿼리로 검색하기

tags 필드에서 "machine learning"을 검색하려면 다음 match_phrase 쿼리를 사용해요:

GET /articles/_search
{
  "query": {
    "match_phrase": {
      "tags": "machine learning"
    }
  }
}

이 결과는 position_increment_gap이 0으로 설정되어 서로 다른 값의 토큰이 인접한 것으로 취급되기 때문에 구문 매칭이 성공한다는 것을 보여줘요:

{
  ...
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.5753642,
    "hits": [
      {
        "_index": "articles",
        "_id": "1",
        "_score": 0.5753642,
        "_source": {
          "tags": [
            "machine",
            "learning"
          ]
        }
      }
    ]
  }
}

만약 position_increment_gap이 100으로 유지된다면, machine과 learning 토큰이 서로 100 포지션 떨어져 있는 것으로 간주되므로 어떤 히트도 반환되지 않을 거예요.

더 알아보기 (Learn more)