elasticsearch 7.x 常见问题

1.mapping 中fields字段(子选项为keyword时候子选项不分词,一方面可以满足分词搜索,另一方面可以聚合查询)

PUT zhang
{
  "mappings": {
    "properties": {
       "name":{
         "type":"text",
         "fields": {
           "keyword":{
             "type":"keyword"
           }
         }
      }
    }
  }
}

我们添加两条数据

POST  zhang/_doc
{
  "name":"wang ba"
}
POST  zhang/_doc
{
  "name":"jack ma"
}

我们试着用主字段搜索

GET zhang/_search
{
  "query":{
    "match":{
      "name": "ma"
    }
  }
}

可以看到是能够搜索出来的。然而我们用

GET zhang/_search
{
  "query":{
    "match":{
      "name.keyword": "ma"
    }
  }
}

这样是没法搜出来的,因为子选项是完全匹配没有分词,正确的搜索应该是这样的

GET zhang/_search
{
  "query":{
    "match":{
      "name.keyword": "jack ma"
    }
  }
}

2.算分相关性计算

过滤查询(Filtering queries)只是简单的检查包含或者排除,这就使得计算起来非常快。考虑到至少有一个过滤查询(filtering query)的结果是 “稀少的”(很少匹配的文档),并且经常使用不评分查询(non-scoring queries),结果会被缓存到内存中以便快速读取,所以有各种各样的手段来优化查询结果。

相反,评分查询(scoring queries)不仅仅要找出匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。

常见不使用评分的查询

      1.must  not

      2.filter

      3.constant_score

3.index 属性 false,和not_analyzed 区别 (false 是不允许搜索的,并且属性是 false时候,type必须是keywords, not_analyzed是不分词的)

PUT zhang
{
  "mappings": {
    "properties": {
       "name":{
         "type":"text",
         "index": "not_analyzed"
      }
    }
  }
}

PUT zhang
{
  "mappings": {
    "properties": {
       "name":{
         "type":"keywords",
         "index": false
      }
    }
  }
}

4.null 搜索(type 必须是keyword)

PUT zhang
{
  "mappings": {
    "properties": {
       "name":{
         "type":"keyword",
          "null_value": "null"
          
      }
    }
  }
}
POST  zhang/_doc
{
  "name":null
}
GET zhang/_search
{
  "query":{
    "match":{
      "name":"null"
    }
  }
}

es 批量更新

curl  -XPOST  "http://10.134.3.64:19200/threads/_update_by_query?conflicts=proceed" -H 'content-Type:application/json' -d '{"script": {"lang": "painless","inline": "if (
ctx._source.sink== null) {ctx._source.sink= 0}"}}'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值