2017-07-02 103 views
0

我是ES新手。我创建一个索引:弹性搜索:为什么通配符查询不返回结果?

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

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

我插入一排

"User:x;level:x1; loged in 

然后我tryied运行查询:

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

我什么也没得到,从查询返回。我在这里做错了什么?

+0

修复拼写和代码格式。 – phd

回答

0

通配符查询只能用于未分析的字段。你需要改变你的映射,这样的消息是多领域,文本和关键字:

{ 
    "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到的最大长度您消息

相关问题