• 欢迎来到本博客,希望可以y一起学习与分享

Elasticsearch(三)– 基本使用

Java benz 3年前 (2018-10-30) 330次浏览 0个评论 扫描二维码
文章目录[隐藏]

使用kibana编写Elasticsearch操作命令语句

创建索引

创建索引相当于创建数据库。

创建索引,指定分片和副本的数量(相当于创建数据库)

GET 查询settings

PUT 更新settings

保存/新增文档

指定id,使用PUT

id自增,使用POST

文档插入后,可以到head插件里(http://127.0.0.1:9100/)里的“数据浏览”里,看到插入的数据:

查询文档

查询到的数据这样的:

还可以字段过滤查询:

查到的结果是:

修改文档

覆盖式修改,使用PUT

增量式修改,使用POST

删除

批量操作

如果命令一条条的执行,那么,每执行一条命令,就需要建立一次http连接(elasticsearch是C/S架构),每次都要经历三次握手、四次分手的过程,遇上数量很多的命令,那么效率就会降低。所以,elasticsearch为了解决这个问题,提供了一些批量操作的命令。

批量获取(get)

批量获取使用命令:GET _mget
有一个索引testdb如下:

代码使用如下:

如果是取同一个索引(数据库)下的数据,可以把索引(数据库)抽出来:

同理,我们也可以把类型(表)提到_mget前,表示只对这个类型(表)查询数据:

上面的id也可以使用“ids”来简写:

bulk 批量操作

批量导入可以合并多个操作,比如index、delete、update、create等等。可以让我们把多个的这些操作合并,一次提交。也可以帮助我们从一个索引导入到另一个索引。
需要注意的是,每一条数据都由两行构成(delete除外),其他的命令比如index和create都是由元信息行和数据行组成,update比较特殊,它的数据行可能是“doc”也可能是“upsert”或者“script”。
每一条数据都由两行构成:

{"index":{"_index":"lagou","_type":"job","_id":"1"}}“index”为操作类型,“_index”:填写要索引名,“_type”:填写要类型名,“_id”:填写id

创建索引(index):

示例:

注意:使用 _bulk批量操作的数据,都是要一行一行的写,不能美化成json那样的格式,否则会报错。

增加数据(create):

示例:

更新数据(update):

示例:

删除数据(delete):

示例:

bulk会把这些命令发送到一个节点,然后由这个节点解析元数据(也就是类似这个:{"_index":"lagou","_type":"job","_id":"3"}),然后分发到其他节点的分片,进行操作,等到所有的命令执行完成以后,才统一返回结果。
需要注意的是:但bulk处理的数据比较大,会chunk(分片)传输,因为数据量比较大,会有一定的延迟,所以,不要一次性提交的数据过多。

mapping映射管理

当我们创建索引的时候,可以预先定义字段的类型以及相关属性。这是针对创建type(对应表)的时候生效,为字段指定属性类型,比如:title字段指定为字符串类型,那么title字段就只能存放字符串。还可指定title字段的属性,是否可以被Elasticsearch搜索。
默认情况下,Elasticsearch会根据JSON源数据的基础类型猜测你想要的字段映射。将输入的数据转变成可搜索的索引项。Mapping就是我们自己定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。
它的作用,会让索引建立的更加细致和完善。

内置类型

  • string类型:text,keyword(string类型在ES5开始已经废弃)。
    text与keyword是不同的,text会被分析器分析,拆解-组合成多个字或词;keyword不会被分析器分析,仅仅当做一个字符串存储。
  • 数字类型:long,integer,short,byte,double,float
  • 日期类型:date
  • bool类型:boolean
  • binary类型:binary (不会被检索)
  • 复杂类型:object,nested
  • geo类型(地理位置):geo-point,geo-shape
  • 专业类型:ip,competion(搜索建议)

什么是object、nested类型

示例:

注意:类型一旦创建成功,就不能再修改。
放入数据:

支持属性

  • //是否单独设置此字段的是否存储而从_source字段中分离,默认是false,只能搜索,不能获取值
    "store": false
  • //分词,设置false,字段将不会被索引(即不创建倒排索引)
    "index": true
  • //指定分词器,默认分词器为standard analyzer
    "analyzer": "ik"
  • //字段级别的分数加权,默认值是1.0
    "boost": 1.23
  • //对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存
    "doc_value": false
  • //针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value
    "fielddata": {"format": "disabled"}
  • //可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词
    "fields": {"raw": {"type": "string", "index": "not_analyzed"}}
  • //超过100个字符的文本,将会被忽略,不被索引
    “ignore_above”: 100
  • //设置是否此字段包含在_all字段中,默认时true,除非index设置成no
    "include_in_all": true
  • //4个可选参数docs(索引文档号),freqs(文档号+词频),positions(文档号+词频+位置,通常用来距离查询),offsets(文档号+词频+位置+偏移量,通常被使用在高亮字段)分词字段默认时positions,其他默认时docs
    "index_options": "docs"
  • //分词字段默认配置,不分词字段:默认{“enable”: false},存储长度因子和索引时boost,建议对需要参加评分字段使用,会额外增加内存消耗
    "norms": {"enable": true, "loading": "lazy"}
  • //设置一些缺失字段的初始化,只有string可以使用,分词字段的null值也会被分词
    "null_value": "NULL"
  • //影响距离查询或近似查询,可以设置在多值字段的数据上或分词字段上,查询时可以指定slop间隔,默认值时100
    "position_increament_gap": 0
  • //设置搜索时的分词器,默认跟analyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能
    "search_analyzer": "ik"
  • //默认时TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效
    "similarity": "BM25"
  • //默认不存储向量信息,支持参数yes(term存储),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量)对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用
    "trem_vector": "no"
注意:analyzer,elasticsearch内置只有针对英文的,需要对中文进行analyzer,则需要下载插件,名为:elasticsearch-analysis-ik(https://github.com/medcl/elasticsearch-analysis-ik)。其中Analyzer的选项有 ik_smart 与ik_max_word。
ik_max_word:尽可能多的划词。
ik_smart :中规中矩地划词。

示例:

更多属性,参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.1/mapping-params.html。

查询

查询的分类:

  • 基本查询:使用elasticsearch内置查询条件进行查询
  • 组合查询:把多个查询组合在一起进行复合查询
  • 过滤:查询同时,通过filter条件在不影响打分的情况下筛选数据

基本查询

准备索引:

放入数据:

match查询

term查询

terms查询

控制查询的返回数量

match_all查询

match_phrase 短语查询

multi_match查询

指定返回字段

通过sort把结果排序

range 查询范围

wildcard 模糊查询

组合查询(bool查询)

老版本的filtered已经被bool替换,用bool包括must、should、must_not、filter来完成。
格式如下:

建立测试数据:

简单过滤查询

也可以指定多个值:

查看分析器解析的结果

查看分析器解析的结果,在 “text”里写入文本,就会使用指定的分析器对文本进行分词,并把结果输出。

bool过滤查询,可以做组合过滤查询

嵌套查询

过滤空和非空

建立测试数据:

处理null空值的方法:


文章 Elasticsearch(三)– 基本使用 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!