弹性搜索:为什么通配符查询没有返回结果?

时间:2017-07-02 06:37:01

标签: elasticsearch

我是ES的新手。我创建了一个索引:

PUT test
    {
        "mappings": {
            "logEvent":{
                "dynamic": "false",
                "properties": {
                        "hostName":{
                            "type": "keyword"

                        },
                        "message":{
                            "type": "text"
                        }
                        "timeStamp":{
                            type:"date"
                        }
                    }
             }
        }
    }

我插了一行

"User:x;level:x1; loged in

然后我尝试运行查询:

GET test/logEvent/_search
{
    "query":{
       "wildcard":{
         "message": "User:*;level:x1; loged in"
       }
    }
}

我从查询中得不到任何回报。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

通配符查询只能用于未分析字段。您需要更改映射,以便消息是多字段,包括文本和关键字:

{
  "mappings": {
    "logEvent": {
      "dynamic": "false",
      "properties": {
        "hostName": {
          "type": "keyword"
        },
        "message": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "timeStamp": {
          "type": "date"
        }
      }
    }
  }
}

然后查询:

{
  "query": {
    "wildcard": {
      "message.keyword": "User:*;level:x1; loged in"
    }
  }
}

在映射中,将ignore_above设置为邮件的最大长度