首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Elastic搜索JSON内部

使用Elastic搜索JSON内部
EN

Stack Overflow用户
提问于 2017-10-16 18:57:06
回答 1查看 138关注 0票数 0

我在ES中有一个索引/类型,它有以下类型的记录:

代码语言:javascript
复制
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中包含的记录。查询应该是这样的(它不能工作):

代码语言:javascript
复制
GET <host>:<port>/index/type/_search
{
    "query": {
        "match" : {
            "body" : "Status:0"
        }
    }
}

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-16 20:14:02

您必须更改索引的分析器设置。

对于您介绍的JSON模式,您将需要一个char_filter和一个标记器,它们可以删除JSON元素,然后根据需要进行标记化。

您的分析器应该包含一个标记器和一个char_filter,如下所示:

代码语言:javascript
复制
{
  "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,你会得到这些令牌:

代码语言:javascript
复制
{
  "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")就是您在搜索中使用的令牌。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46768688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档