ElasticSearch介绍与简单语法

ElasticSearch

  • 倒排索引

命令(能够经过Kibana-Devtools-Console)

一、健康状态

GET /_cat/health?v

结果以下java

epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 
1509779009 15:03:29 elasticsearch yellow 1 1 1 1001 0 - 50.0%

二、查看索引

GET /_cat/indices?v

三、建立索引

PUT /test?pretty

四、删除索引

DELETE /test?pretty

五、新增文档并创建索引

语法为:node

PUT /index/type/id
{
  "json数据"
}
  • index:指索引名
  • type:指索引的类型
  • id:是这条数据的id。

例如:(添加和修改是同一个请求)mysql

PUT /goods/book/1
{
    "name" : "深刻理解java虚拟机",
    "price" :  100
}

六、查询指定商品

GET /goods/book/1

七、删除指定商品

DELETE  /goods/book/1

八、查询全部商品

GET  /goods/book/_search

返回参数以下c++

  • took:耗费了几毫秒
  • timed_out:是否超时,这里是没有
  • _shards:数据拆成了5个分片,因此对于搜索请求,会打到全部的primary shard(或者是它的某个replica shard也能够)
  • hits.total:查询结果的数量,3个document
  • hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
  • hits.hits:包含了匹配搜索的document的详细数据

九、query sring search

GET /goods/book/_search?q=name:java&sort=price:desc

不建议使用。web

十、query DSL(Domain Specified Language,特定领域的语言)

查询全部的商品sql

GET /goods/book/_search
{
  "query": { "match_all": {} }
}

查询名称包含java的商品,同时按照价格降序排序json

GET /goods/book/_search
{
    "query" : {
        "match" : {
            "name" : "java"
        }
    },
    "sort": [ 
        { "price": "desc" }
    ]
}

分页查询商品,总共3条商品,假设每页就显示1条商品,如今显示第2页,因此就查出来第2个商品elasticsearch

GET /goods/book/_search
{
  "query": { "match_all": {} },
  "from": 1,
  "size": 1
}

指定要查询出来商品的名称和价格就能够.net

GET /goods/book/_search
{
  "query": { "match_all": {} },
  "_source": ["name", "price"]
}

十一、query filter

搜索商品名称包含NB,并且售价大于300元的商品插件

GET /goods/book/_search
{
    "query" : {
        "bool" : {
            "must" : {
                "match" : {
                    "name" : "java"
                }
            },
            "filter" : {
                "range" : {
                    "price" : { "gt" : 300 }
                }
            }
        }
    }
}

十二、full-text search(全文检索)

POST /goods/book/2 
{ 
    "name" : "c++", 
    "price" : 220
}

而后再来查询,name这个字段,会先被拆解,创建倒排索引 :

GET /shores/product/_search
{
    "query" : {
        "match" : {
            "name" : "c++"
        }
    }
}

1三、phrase search(短语搜索)

跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就能够做为结果返回 phrase search,要求输入的搜索串,必须在指定的字段文本中,彻底包含如出一辙的,才能够算匹配,才能做为结果返回

GET /shores/product/_search
{
    "query" : {
        "match_phrase" : {
            "name" : "java"
        }
    }
}

1四、highlight search(高亮搜索结果)

GET /shores/product/_search
{
    "query" : {
        "match" : {
            "name" : "java"
        }
    },
    "highlight": {
        "fields" : {
            "name" : {}
        }
    }
}

状态

  • green:每一个索引的primary shard和replica shard都是active状态的
  • yellow:每一个索引的primary shard都是active状态的,可是部分replica shard不是active状态,处于不可用的状态
  • red:不是全部索引的primary shard都是active状态的,部分索引有数据丢失了

document的核心元数据

一、_index元数据

  • (1)表明一个document存放在哪一个index中
  • (2)相似的数据放在一个索引,非相似的数据放不一样索引:product index(包含了全部的商品),sales index(包含了全部的商品销售数据),inventory index(包含了全部库存相关的数据)。若是你把好比product,sales,human resource(employee),全都放在一个大的index里面,好比说company index,不合适的。
  • (3)index中包含了不少相似的document:相似是什么意思,其实指的就是说,这些document的fields很大一部分是相同的,你说你放了3个document,每一个document的fields都彻底不同,这就不是相似了,就不太适合放到一个index里面去了。
  • (4)索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

二、_type元数据

  • (1)表明document属于index中的哪一个类别(type)
  • (2)一个索引一般会划分为多个type,逻辑上对index中有些许不一样的几类数据进行分类:由于一批相同的数据,可能有不少相同的fields,可是仍是可能会有一些轻微的不一样,可能会有少数fields是不同的,举个例子,就好比说,商品,可能划分为电子商品,生鲜商品,日化商品,等等。
  • (3)type名称能够是大写或者小写,可是同时不能用下划线开头,不能包含逗号

三、_id元数据

  • (1)表明document的惟一标识,与index和type一块儿,能够惟一标识和定位一个document
  • (2)咱们能够手动指定document的id(put /index/type/id),也能够不指定,由es自动为咱们建立一个id

拓展

相关文章
相关标签/搜索