ES动态映射成keyword不能全文检索

当ES在文档中碰到一个以前没见过的字段时,它会利用动态映射来决定该字段的类型,并自动地对该字段添加映射。

ES动态映射,创建了字段,而且默认添加一个keyword的field,导致不能全文索引

  "custom_info": {
            "properties": {
              "attendSchool": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }

}

查询语句,查询不出来。必须精确查询才能匹配上。

GET /imc_case_v3/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "custom_info.case.motherName": "mmmm"
          }
        }
      ]
    }
  }
}

有时这正是需要的行为,但有时不是。你或许不知道在以后你的文档中会添加哪些字段,但是你想要它们能够被自动地索引。或许你只是想要忽略它们。或者 - 尤其当你将ES当做主要的数据存储使用时 - 大概你会希望这些未知的字段会抛出异常来提醒你注意这一问题。

幸运的是,你可以通过dynamic设置来控制这一行为,它能够接受以下的选项:

  • true:默认值。动态添加字段
  • false:忽略新字段
  • strict:如果碰到陌生字段,抛出异常

 

尽管ES索引一旦创建就不能呗修改,但是也有例外,例如:

 

修改之后,还是不能模糊搜索,后来知道有nested类型,会对内部对象也索引,但是隐藏文档,不能直接用query查询。

GET /my_index/blogpost/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "eggs" }}, <1>
        {
          "nested": {
            "path": "comments", <2>
            "query": {
              "bool": {
                "must": [ <3>
                  { "match": { "comments.name": "john" }},
                  { "match": { "comments.age":  28     }}
                ]
        }}}}
      ]
}}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值