【问题标题】:Empty search string not yielding all documents in Elasticsearch空搜索字符串不会产生 Elasticsearch 中的所有文档
【发布时间】:2017-10-13 23:23:50
【问题描述】:

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

【问题讨论】:

  • 什么 ES 版本?
  • @AndreiStefan 5.3 ,将编辑并添加到问题中。
  • 我对此进行了测试,但没有收到任何文件。您如何将查询发送到 ES?
  • @AndreiStefan 我正在使用ruflin/elastica 构建查询并发送查询。如果我把代码放在问题中会有帮助吗?
  • @AndreiStefan:和我一样..

标签: elasticsearch


【解决方案1】:

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

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

据我所知,多重匹配不适用于空关键字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2021-03-26
    相关资源
    最近更新 更多