我理解的elasticsearch(二)

上一节我们讲到数据类型,elasticsearch的数据类型和其他编程语言的数据类型一样,都是提供一个值的范围和一些操作。数据类型有字符串,数值,日期,数组,多字段。

搜索文档:

⑴返回源文档的某些字段

curl -XGET 'localhost:9200/get-together/group/1?pretty&fields=name'

⑵索引所有字段

curl 'localhost:9200/get-together/group/_search?q=elasticsearch'

系统默认情况下将会在_all上搜索,如果总在特定的字段上进行搜索,可以通过设置enabled为false来关闭_all,这样会使索引的范围变小

curl -XPUT 'localhost:9200/get-together/_mapping/custom-all' -d ' {
"custom-all" : {
    "properties" : {
        "organizer" : {
            "type" : "string",
            "include_in_all" : false
} }  }  }' 

通过ID为lst的文档

curl -XPUT 'localhost:9200/get-together/manual_id/1st?pretty' -d ' {
"name" : "elasticsearch"
}'

生成ID,使用HTTP Post请求并省去ID:

curl -XPOST 'localhost:9200/logs/quto_id/?pretty' -d ' {
"message" : "i hava an automatic id " }'

更新文档

⑴通过发送部分文档,增加或替换现有文档的一部分

curl -XPOST 'localhost:9200/get-together/group/2/_update' -d '{
"doc" : {
    "organizer" : "roy"
    }
}

⑵如果文档那个之前不存在,则发送部分文档或者脚本时,确定文档是否被创建,使用upsert来创建尚不存在的文档

curl -XPOST 'localhost:9200/get-together/group/2/_update' -d '{
"doc" : {
    "organizer" : "roy"
},
"upsert" : {
    "name" : "elasticsearch",
    "organizer" : "roy"
}
}'

⑶发送脚本来更新文档

...

并发控制

对于同一时刻更新同一个文档,有可能产生并发问题,在其他更新获取原有文档并进行修改的时候,有可能另一个更新重新索引了这篇文档,如果没有并发控制,第二次的重新索引将会取消第一次更新所做的修改。elasticsearch支持并发控制,为每一篇文档设置一个版本号。

使用版本号索引文档

curl -XPUT 'localhost:9200/online-shop/shirts/1?version=3' -d ' {
"caption" : " i am a student",
"price" : 5
}'

删除数据

⑴删除单个文档或者一组文档

①通过ID删除单个文档,

curl -XDELETE 'localhost:9200/online-shop/shirts/1'

 ②在单个请求中删除多个文档

删除整个映射类型,包括映射本身和其中索引的全部文档

curl -XDELETE 'localhost:9200/online-shop/shirts'

查询某个类型的所有文档并删除他们 

curl -XDELETE 'localhost:9200/get-together/_query?q=elasticsearch'

⑵删除整个索引

curl -XDELETE 'localhost:9200/get-together/'

⑶关闭索引

关闭索引后,无法通过Elasticsearch来读取和写入其中的数据,直到在次打开它。

curl -XPOST 'localhost:9200/online-shop/_close'

重新开启索引

curl -XPOST 'localhost:9200/online-shop/_open'

深入搜索数据:

elasticsearch接受搜索请求后,将请求发送到所连接的节点,该节点根据要查询的索引,将这个请求一次发送到所有的相关分片,从所有分片收集到足够的排序和排名信息后,只有包含所需文档的分片才会被要求返回相关的内容。

URL中限制搜索的范围:

搜索整个集群
curl  'localhost:9200/_search' -d  '...'   

搜索指定的索引
curl  'localhost:9200/get-together/_search' -d '...'

搜索全部索引
curl  'localhost:9200/*/_search' -d  '...'
curl  'localhost:9200/_all/search'  -d '...'

搜索特定索引
curl  'localhost:9200/+get-toge*,-get-together/_search' -d '...'

搜索多个类型
curl  'localhost:9200/together,other/event,group/_search' -d '...'

搜索指定类型
curl  ’localhost:9200/together/event/_search' -d '...'

搜索请求中的基本模块,参数:

query:配置了基本评分返回的最佳文档,

size:指定返回文档的数量,

from:用于分页操作,和size一起使用,

_source:指定_source字段如何返回,默认返回完整的_source字段,

sort:默认的排序是基于文档的得分。eg.

使用模块实现分页:
curl 'localhost:9200/get-together/_search?from=3&size=7'

改变结果的顺序:
curl 'localhost:9200/get-together/_search?sort=date:asc'


在回复中限制source的字段
curl 'localhost:9200/get-together/_search?sort=date:asc&_source=title,date'


基于请求主体的搜索:match_all查询会返回被索引和类型中的全部的文档。

curl 'localhost:9200/get-together/_search' -d  '{
"query" : {
    "match_all" : {}
    },
"from" : 10,
"size" : 10
}'

过滤返回的_source内容:

curl 'localhost:9200/get-together/_search' -d '{
"query": {    
    "match_all" : {}
    },
"_source" : ["name","date"]
}'

 使用通配符过滤返回的_source内容

curl 'localhost:9200/get-together/_search' -d '{
"query" : {
    "match_all" : {}
    },
"_source" : {
    "include" : ["location.*","date"],
    "exclude" : ["location.geolocation"]
    }
}'

结果的排序

curl 'localhost:9200/get-together/_search' -d '{
"query" : {
    "match_all" : {}
},
"sort" : [
    {"created_on" : "asc"},
    {"name" : "desc"},
    "_score"
    ]
}'

范围,分页,字段和排序:

curl 'localhost:9200/get-together/group/_search' -d '{
"query" : {
    "match_all" : {}
},
"from" : 1,
"size" : 10,
"_source" : ["name","organizer","description"],
"sort" : [{"created_on" : "desc" } ]
}'

term过滤器:

过滤器在评分机制上和搜索性能上与查询不同,过滤器不会为特定的词条计算得分,搜索的过滤器只是为“文档是否匹配这个查询”,返回简单的是或否的答案,因此,过滤器比普通的查询更快,而且还可以缓存。

curl ’localhost:9200/get-together/_search' -d '{
"qeury" : {
    "filtered" : {
        "query" : {
            "match" : {
                "title" :"hadoop"
                }
            },
        "filter": {
            "term" : {
                "host" : "andy"
                }
            }
        }
    }
}'

未完待续

 

参考《Elasticsearch实战》    如果错误,敬请指出,谢谢,共勉

 

 

 

 

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
11-08 16:53
门头沟学院 C++
投票
滑模小马达:第三个如果是qfqc感觉还行,我签的qfkj搞电机的,违约金也很高,但公司感觉还可以,听说之前开过一个试用转正的应届生,仅供参考。
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务