我在ES中有一个索引/类型,它有以下类型的记录:
body "{\"Status\":\"0\",\"Time\":\"2017-10-3 16:39:58.591\"}"
type "xxxx"
source "11.2.21.0"body字段是我想要搜索的JSON.So,例如,它们的JSON body Status:0中包含的记录。查询应该是这样的(它不能工作):
GET <host>:<port>/index/type/_search
{
"query": {
"match" : {
"body" : "Status:0"
}
}
}有什么想法吗?
发布于 2017-10-16 20:14:02
您必须更改索引的分析器设置。
对于您介绍的JSON模式,您将需要一个char_filter和一个标记器,它们可以删除JSON元素,然后根据需要进行标记化。
您的分析器应该包含一个标记器和一个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
} ]
}分析API检索到的第一个令牌("Status:0")就是您在搜索中使用的令牌。
https://stackoverflow.com/questions/46768688
复制相似问题