es的简易dsl语句

数据模式为文档,_doc格式数据,也就是json 数据

es根据_id查询数据

GET /index_name/_doc/document_id

es根据_id删除数据

DELETE /index_name/_doc/document_id

es查询mapping结构

GET /index_name/_mappings

es查询index下所有数据(突破10000条限制)

GET /index_name/_search
{
  "query": {
    "match_all": {}
  },
  "track_total_hits": true
}

es新建mapping映射

PUT /passdata
{
    "mappings" : {
      "properties" : {
        "carId" : {
          "type" : "keyword",
          "index": true
        },
        "id" : {
          "type" : "text",
          "index": true
        },
        "name" : {
          "type" : "text",
          "index": true,
          "analyzer": "ik_max_word", 
          "search_analyzer": "ik_max_word", 
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "time" : {
          "type" : "date"
        },
        "type" : {
          "type" : "text",
          "index": true,
          "analyzer": "ik_max_word", 
          "search_analyzer": "ik_max_word"
        }
      }
    }
  }

6.0后字符串不用string;改成text和keyword两种了,keyword是默认不分词,text是要分词

这种结构保存字段会存两份索引(个人理解),首先第一个type text这个会进行分词建索引保存,再后面fields keyword会进行保存完整字符串附加。

所以一个articleID过来的时候,会建立两次索引。一次是自己本身(articleID),是要分词的,分词后放入倒排索引;另一次是基于articleID.keyword,不分词,最多保留256字符,直接一个完整的字符串放入倒排索引中。

text:

  • 会分词,然后进行索引
  • 支持模糊、精确查询
  • 不支持聚合
  • 分词器默认standard ,对于中文来说就是按字分词
  • 支持fields属性,可以在fields中添加keyword子类型,以实现精确检索
keyword:

  • 不进行分词,直接索引
  • 支持模糊、精确查询
  • 支持聚合
  • 支持按字数建立索引,以便节约索引空间
  • 看下text分词规律。

注意es 默认的分词是汉字为一个字一词,如果想用其他分词,引入ik分词。

es的sort 字段有的有有的没有,如果没有就排在最后

在Elasticsearch中,如果你想要在排序时将没有特定字段的文档放在最后,你可以使用missing参数来定义一个默认值。对于时间字段time,如果文档中没有这个字段,你可以设置一个非常早的时间或者一个特定的值,确保它总是被排序在最后。以下是一个如何使用missing参数的例子,假设你的时间字段名为time:

{
  "sort": [
    {
      "time": {
        "order": "asc",
        "missing": "_last", 
        "unmapped_type": "date"
      }
    }
  ]
}

missing 设置为 _last,这意味着如果文档中没有time字段,它将被当作一个非常大的日期,从而在排序时被放置在最后。unmapped_type 设置为 date 是为了确保即使time字段在文档中不存在,Elasticsearch也会按照日期类型来处理这个缺失值。

如果想要自定义一个特定的时间值来代替缺失的字段,可以将missing设置为你想要的具体时间值:

{
  "sort": [
    {
      "time": {
        "order": "asc",
        "missing": "2000-01-01T00:00:00", 
        "unmapped_type": "date"
      }
    }
  ]
}

所有没有time字段的文档将在排序时被当作2000年的某个时间,并且因为它们被当作是在2000年之后,所以它们会被放置在排序的最后

es 查询某一字段值不存在

{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "my_field"
        }
      }
    }
  }
}

exists查询用于检查字段my_field是否存在。must_not子句确保只返回不匹配该查询的文档,即那些my_field字段不存在的文档。

es查询某一字段存在且不为空

GET /index/_search
{
  "query": {
    "exists": {
      "field": "fieldName"
    }
  }
}

这个查询会返回所有包含该字段且字段值不为null的文档。

查看es分词结果
智能分词器

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "1号线,2号线"
}

细粒度分词器

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "1号线,2号线"
}

扩展词库、自定义词库

扩展词库、自定义词库
找到es的IK插件位置:

\elasticsearch\plugins\ik\config

打开IKAnalyzer.cfg.xml文件

添加自定义扩展文件

<!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">my.dic</entry>

同时,在同级目录新建my.dic文件,加入自定义词汇,例如:

1号线
2号线
.......

保存,重启ES即可生效。

注意:自定义的词库只有在使用ik_smart分词才会起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值