我在ES有两个查询。这两份文件在同一组文件上有不同的周转时间。两者在概念上都做同样的事情。我有一些疑问过滤布尔与布尔查询: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- 布尔/必须查询能够搜索所需记录
{
"query": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
2- 虽然布尔/过滤器不能够搜索的文档。如果删除了第二场条件它搜索相同的记录与FIELD2的值作为401
{
"query": {
"bool": {
"filter": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
UPDATE2:
实测值抑制得分相用布尔的溶液/必须由内包裹它查询“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