ElasticSearch 조회 제5편: 볼 조회
볼 조회는 여러 개의 조회 조건을 한데 묶을 뿐만 아니라 조회의 결과와 결과의 평점을 한데 묶는 데 가장 자주 사용되는 조합 조회이다.조회 조건이 여러 개의 표현식의 조합일 때 볼 조회는 매우 유용하다. 실제로 볼 조회는 여러 개의 하위 조회 조합(combine)을 하나의 볼 표현식으로 하고 모든 하위 조회 간의 논리적 관계는 (and)이다.ElasticSearch 엔진은 한 문서가 볼 조회의 모든 하위 조회 조건을 충족시킬 때만 이 문서가 조회 조건을 충족한다고 생각합니다.볼 조회가 지원하는 하위 조회 유형은 모두 네 가지가 있는데, 각각:must,should,must_not 및 filter:
일반적인 경우,should 자구는 여러 개의should 자 조회를 포함하는 수조 필드이며, 기본적으로 일치하는 문서는 그 중의 한 자 조회 조건을 만족시켜야 한다.질의가 기본 일치 동작을 변경해야 하는 경우 질의 DSL은 부울 질의의 매개변수 minimum_를 명시적으로 설정해야 합니다.should_match의 값, 이 매개 변수는 문서에 일치해야 하는should 서브 쿼리의 수량을 제어합니다. 브릴 쿼리 문장을 만났습니다. should 서브 문장에 두 개의 쿼리가 포함되어 있습니다. 매개 변수를 설정하지 않으면minimum_should_match, 기본값은 0입니다.부울 조회에서 설정 매개 변수 minimum_ 보이기should_match 값입니다.
주: 볼 조회의 네 개의 자구는 모두 그룹 필드일 수 있기 때문에 논리 조작을 끼워 넣는 조회를 지원합니다.
예를 들어 다음 should 조회에 대해 문서는 should 자구의 두 개 이상의 단어 조회를 만족시켜야 한다.
"should" : [
{ "term" : { "tag" : "azure" } },
{ "term" : { "tag" : "elasticsearch" } },
{ "term" : { "tag" : "cloud" } }
],
"minimum_should_match" : 2
볼 조회의 각 자구 간의 논리적 관계는 (and) 이다. 이것은 한 문서가 모든 조회 자구를 동시에 만족시킬 때만 이 문서가 조회 조건과 일치하고 결과로 되돌아온다는 것을 의미한다.
볼 조회에서 조회 결과에 대한 필터는 필터 (filter) 자구와 must_를 사용하는 것을 권장합니다이 두 자구는 필터 상하문(Filter Context)에 속하고 필터 자구를 자주 사용하여 ElasticSearch 엔진이 자동으로 데이터를 캐시합니다. 캐시된 데이터를 다시 검색할 때 검색 성능을 향상시킬 수 있습니다.필터 상하문은 조회의 평점에 영향을 주지 않기 때문에 평점 계산은 검색을 복잡하게 하고 더 많은 CPU 자원을 소모하기 때문에 filter와must_not 검색은 검색 작업 부하를 줄일 수 있습니다.
1. 컨텍스트 조회 및 필터링
부울 조회에서 조회는Query Context와 Filter Context로 나뉘며, 조회 상하문은query 매개 변수로 지정되고, 필터 상하문은filter와must_not 매개변수 지정.이 두 질의 상하문의 유일한 차이점은 Filter Context가 질의의 평점(score)에 영향을 주지 않는다는 것이다.부울 조회에서 Filter 매개변수 및must_not 매개 변수는 Filter Context를 사용하고must와should는Query Context를 사용하며 Filter Context를 자주 사용하면 엔진이 자동으로 데이터를 캐시하여 조회 성능을 향상시킵니다.
GET _search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
상기 조회 요청에 대해must 자구는query context에 있고, filter 자구는filter context에 있습니다.
둘째, 볼 조회 자구의 논리적 관계
볼 조회에서 각 자구 간의 논리적 관계는 (and) 와 이다.단일 자구에 대해 하나의 문서가 이 자구의 조회 조건을 만족시키면 되돌아오는 논리적 결과는true이고,should 자구에 대해서는 일반적으로 여러 개의 자구 조회 조건을 포함합니다. 매개 변수 minimum_should_match 제어 문서는should 자구의 하위 검색 조건의 수량을 만족시켜야 합니다. 문서가 지정한 수량의should 검색 조건을 만족시킬 때만should 자구가 되돌아오는 논리적 결과는true입니다.
{
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "from" : 10, "to" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1
}
}
상기 볼 조회에서should 자구에 두 개의 단어 조회가 포함되어 있습니다. 인자 minimum_should_match의 값은 1입니다. 따라서 임의의 단어 조회 조건을 안정적으로 충족시키면 should 자구가 일치하여 논리 결과true를 되돌려주고 다른 자 조회와 논리 연산을 합니다. 이 문서가 모든 자 조회 조건을 충족시킬 때만 검색 결과로 클라이언트로 되돌려줍니다.
3, 볼 조회 예시 분석
1, 부울 조회를 사용하여 간단한 논리 조회를 실현
다음 예제에서는 부울 질의의 연산 논리를 분석합니다.
{
"query":{
"bool":{
"must":{
"match":{ "eventname":"style" }
},
"should":[
{ "match":{ "eventname":"google" } },
{ "match":{ "eventname":"aws" }}
],
"minimum_should_match":1
}
}
}
위의 분석을 통해 다음 필드 값은 조회 조건을 충족합니다.
2, 부울 조회를 사용하여 복잡한 그룹 조회를 실현
복잡한 그룹 조회, 예를 들어 (A and B) or (C and D) or (E and F), 볼 조회를 should 자구의 하위 조회로 사용:
{
"_source": "topics",
"from": 0,
"size": 100,
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{ "term": { "topics": 1} },
{ "term": { "topics": 2} }
]
}
},
{
"bool": {
"must": [
{"term": { "topics": 3 } },
{"term": { "topics": 4}}
]
}
}
],
"minimum_should_match": 1
}
}
}
참조 문서:
Elasticsearch Reference [2.4] » Query DSL » Compound queries » Bool Query
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.