我在ES中有一个索引/类型,它具有以下类型的记录:
body "{\"Status\":\"0\",\"Time\":\"2017-10-3 16:39:58.591\"}"
type "xxxx"
source "11.2.21.0"
正文字段是JSON。所以我想搜索其JSON正文Status:0
中的记录。
查询应该看起来像这样(它不起作用):
GET <host>:<port>/index/type/_search
{
"query": {
"match" : {
"body" : "Status:0"
}
}
}
有什么想法吗?
答案 0 :(得分:0)
您必须更改索引的分析器设置。
对于你提出的JSON模式,你需要有一个char_filter和一个tokenizer来删除JSON元素,然后根据你的需要进行标记。
你的分析器应该包含一个tokenizer和一个像这样的char_filter:
{
"tokenizer" : {
"type": "pattern",
"pattern": ","
},
"char_filter" : [ {
"type" : "mapping",
"mappings" : [ "{ => ", "} => ", "\" => " ]
} ],
"text" : [ "{\"Status\":\"0\",\"Time\":\"2017-10-3 16:39:58.591\"}" ]
}
解释:char_filter将删除字符:{ } "
。令牌化器将用逗号标记。
可以使用Analyze API测试这些。如果您针对此API执行上述JSON,您将获得这些令牌:
{
"tokens" : [ {
"token" : "Status:0",
"start_offset" : 2,
"end_offset" : 13,
"type" : "word",
"position" : 0
}, {
"token" : "Time:2017-10-3 16:39:58.591",
"start_offset" : 15,
"end_offset" : 46,
"type" : "word",
"position" : 1
} ]
}
Analyze API检索的第一个标记("Status:0"
)是您在搜索中使用的标记。