我正在使用Elastica的查询构建器为ElasticSearch(版本5.3)
创建查询我有大约1600个文档在特定索引和类型中编入索引,
当我在查询中使用空字符串执行搜索时,我只能获得大约440次点击,
生成的查询是:
{
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "",
"fields": ["<field_1>^5", "<field_2>^4", "<field_3>^1", "<field_4>^2"],
"fuzziness": "AUTO"
}
}]
}
},
"from": 0,
"size": 20,
"aggs": {
"<agg_name_1>": {
"terms": {
"field": "<agg_field_1>"
}
},
"<agg_name_2>": {
"terms": {
"field": "<agg_field_2>"
}
},
"<agg_name_3>": {
"terms": {
"field": "<agg_field_3>"
}
},
"<agg_name_4>": {
"terms": {
"field": "<agg_field_4>"
}
},
"<agg_name_5>": {
"terms": {
"field": "<agg_field_5>"
}
},
"<date_agg_name>": {
"date_range": {
"field": "<agg_field_date_1>",
"keyed": true,
"ranges": [{
"from": "now\/d",
"key": "NOW\/DAY TO *"
}, {
"from": "now-2d\/d",
"key": "NOW\/DAY-2DAY TO *"
}, {
"from": "now-7d\/d",
"key": "NOW\/DAY-7DAY TO *"
}, {
"from": "now-30d\/d",
"key": "NOW\/DAY-30DAY TO *"
}]
}
},
"<agg_name_integer>": {
"range": {
"field": "<agg_field_integer>",
"keyed": true,
"ranges": [{
"to": 1,
"key": "1"
}, {
"to": 2,
"key": "2"
}, {
"to": 3,
"key": "3"
}, {
"to": 4,
"key": "4"
}, {
"to": 5,
"key": "5"
}]
}
}
}
}
我认为既然查询是空字符串,它应该匹配所有文档,但为什么它只匹配文档的一个子集?我也尝试使用should
更改must
,但没有区别。
是因为multi_match
吗?还是fuzziness
?还是fields
?
P上。 S.字段的实际名称已更改,并替换为占位符。
答案 0 :(得分:0)
如果查询字段为空,则可以使用match_all查询
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html
根据我的注意,多重匹配不适用于空关键字。