span field masking 쿼리
span field masking 쿼리
field_masking_span 쿼리는 쿼리의 실제 필드를 "마스킹"해 span 쿼리가 여러 필드에 걸쳐 일치할 수 있게 해줘요. 이는 멀티 필드(같은 내용이 다른 분석기로 인덱싱된 경우)를 다룰 때나 span_near, span_or 같은 span 쿼리를 서로 다른 필드에 걸쳐 실행해야 할 때(보통 허용되지 않음) 특히 유용합니다.
예를 들어 field_masking_span 쿼리를 사용해 다음을 할 수 있어요.
- 원본 필드와 그 어간 추출(stemmed) 버전에 걸쳐 용어를 매치하기
- 서로 다른 필드의 span 쿼리를 단일 span 연산으로 결합하기
- 다른 분석기로 인덱싱된 같은 내용을 다루기
필드 마스킹을 사용하면 관련성 점수는 실제 검색 중인 필드가 아니라 마스킹된 필드의 특성(norms)으로 계산돼요. 즉 마스킹된 필드가 검색 중인 필드와 다른 속성(길이나 boost 값 같은)을 가지면 예상치 못한 점수 결과를 받을 수 있습니다.
출처: 문서
본문
예제 (Example)
이 섹션의 예제를 실행하려면 설정(setup) 단계를 완료하세요.
다음 쿼리는 stemmed 필드에서 "sleeve" 단어의 변형 근처에 있는 "long" 단어를 검색해요.
GET /clothing/_search
{
"query": {
"span_near": {
"clauses": [
{
"span_term": {
"description": "long"
}
},
{
"field_masking_span": {
"query": {
"span_term": {
"description.stemmed": "sleev"
}
},
"field": "description"
}
}
],
"slop": 1,
"in_order": true
}
}
}
이 쿼리는 문서 1과 문서 4를 매치해요.
- 두 문서 모두 description 필드에 "long"이라는 용어가 나타나요.
- 문서 1에는 "sleeved"라는 단어가, 문서 4에는 "sleeves"라는 단어가 있어요.
- field_masking_span은 stemmed 필드의 일치가 원본 필드에 있는 것처럼 보이게 해요.
- 용어들이 지정된 순서로 서로 1 위치 안에 나타나요("long"이 "sleeve"보다 앞에 와야 함).
응답:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.7444251,
"hits": [
{
"_index": "clothing",
"_id": "1",
"_score": 0.7444251,
"_source": {
"description": "Long-sleeved dress shirt with a formal collar and button cuffs. "
}
},
{
"_index": "clothing",
"_id": "4",
"_score": 0.4291246,
"_source": {
"description": "A set of two midi silk shirt dresses with long fluttered sleeves in black. "
}
}
]
}
}
파라미터 (Parameters)
다음 표는 field_masking_span 쿼리가 지원하는 모든 최상위 파라미터를 나열해요. 모든 파라미터는 필수예요.
- query (Object): 실제 필드에 실행할 span 쿼리예요.
- field (String): 쿼리를 마스킹하는 데 사용되는 필드 이름이에요. 다른 span 쿼리는 이 쿼리가 이 필드에서 실행되는 것처럼 취급해요.