如何在弹性搜索发现中正确使用通配符?

时间:2019-05-02 10:26:43

标签: elasticsearch

我刚进入ES,对此没有太多经验,所以可能是我所缺少的。

我找到了以下文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html,基本上说明了如何进行通配符搜索。

我正在尝试查找文档中具有某些模式的所有消息。

因此,我使用Kibana Sense(弹性搜索查询用户界面)做到了这一点:

GET _search
{
    "query": {
        "wildcard" : {
            "model.message": "my*"
        }
    }
}

为此,我试图获取所有以“我的”

开头的消息

但是我没有结果...

这是我的文档结构的副本(或至少是第一行...)

 "_index": "my_index",
    "_type": "my_type",
    "_id": "123456",
    "_source": {
      "model": {
        "id": "123456",
        "message": "my message",

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

您的示例文档实际上包含model.content.message字段,但不包含model.message字段,因此以下查询应该有效:

GET _search
{
    "query": {
        "wildcard" : {
            "model.content.message": "my*"
        }
    }
}

答案 1 :(得分:0)

您可以分享您的地图吗?看来您需要使用嵌套查询:

GET /_search
{
    "query": {
        "nested" : {
            "path" : "model",
            "score_mode" : "avg",
            "query" : {
                "wildcard" : {
                    "model.message": "my*"
                }
            }
        }
    }
}

您可以了解有关嵌套查询here的更多信息。