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 포지션 떨어져 있는 것으로 간주되므로 어떤 히트도 반환되지 않을 거예요.