空搜索字符串不会产生Elasticsearch中的所有文档

时间:2017-05-15 08:48:52

标签: elasticsearch

我正在使用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.字段的实际名称已更改,并替换为占位符。

1 个答案:

答案 0 :(得分:0)

如果查询字段为空,则可以使用match_all查询

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-all-query.html

根据我的注意,

多重匹配不适用于空关键字。