ES에서 두 개의 쿼리가 있습니다. 둘 다 동일한 문서 세트에서 처리 시간이 다릅니다. 둘 다 개념적으로 같은 일을하고 있습니다. 나는 의심의 여지가 없다.필터링 된 bool 대 Bool 쿼리 : elasticsearch
1-이 두 가지의 차이점은 무엇입니까? 2- 어느 것이 더 사용하기 적합합니까? 3- 둘 다 동일하면 왜 다르게 수행 하는가?
1. Filtered bool
{
"from": 0,
"size": 5,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1987112602"
}
},
{
"term": {
"original_sender_address_number": "6870340319"
}
},
{
"range": {
"x_event_timestamp": {
"gte": "2016-07-01T00:00:00.000Z",
"lte": "2016-07-30T00:00:00.000Z"
}
}
}
]
}
}
}
},
"sort": [
{
"x_event_timestamp": {
"order": "desc",
"ignore_unmapped": true
}
}
]
}
2. Simple Bool
{
"query": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1277478699"
}
},
{
"term": {
"original_sender_address_number": "8020564722"
}
},
{
"term": {
"cause_code": "573"
}
},
{
"range": {
"x_event_timestamp": {
"gt": "2016-07-13T13:51:03.749Z",
"lt": "2016-07-16T13:51:03.749Z"
}
}
}
]
}
},
"from": 0,
"size": 10,
"sort": [
{
"x_event_timestamp": {
"order": "desc",
"ignore_unmapped": true
}
}
]
}
매핑 :
{
"ccp": {
"mappings": {
"type1": {
"properties": {
"original_sender_address_number": {
"type": "string"
},
"called_party_address_number": {
"type": "string"
},
"cause_code": {
"type": "string"
},
"x_event_timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
.
.
.
}
}
}
}
}
업데이트 1 : 나는 데이터의 동일한 세트에 부울/쿼리해야이 부울/필터 쿼리했지만, 나는 이상한 행동을 발견
1- bool/must 쿼리가 원하는 검색어를 검색 할 수 있습니다. 불리언/필터 문서를 검색 할 수는 없지만
{
"query": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
2- 문서화. I 번째 필드 조건을 삭제하는 경우는 (401)과 같은 2 필드의 값
{
"query": {
"bool": {
"filter": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
갱신 2와 같은 레코드를 검색한다
BOOL 득점 위상을 억제하는 용액/내에 배치하여 쿼리해야 발견 "constant_score". "1235235757"와 "cause_code": "304"우리가 "called_party_address_number"가 일치하도록 노력하고있다
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1235235757"
}
},
{
"term": {
"cause_code": "304"
}
}
]
}
}
}
}
}
기록.
흥미롭게도 두 번째는 헤드 plugin.Thanks에 의해 생성되는 . – Mudit
둘 다 유효하지만, 쿼리 컨텍스트에서 (점수 계산과 함께 더 느린) 'must'가있는 첫 번째 명령이 실행되는 반면, 'filter'가있는 두 번째 명령은 점수를 매길 필요가없는 경우 최적화의 일종입니다. – Val
나는 이것을 위해 점수를 매길 필요가 없습니다. 너 한테 제안한 건가. 빠른 도움을 제공해 주셔서 감사합니다. – Mudit