注意:以下命令都是使用sense测试(ElasticSearch第二步-CRUD之Sense),且数据都已经使用过IK分词。

以下测试数据来源于文档(db_test/person)

需要注意的是下面的id是文档的ID,不是elasticsearch生成的_id,删除文档需要用_id

{ "id": "0959ab1c-47bf-4417-904c-e5bc774ce730", "name": "王军华", "age": 265, "sex": true, "birthday": "2015-04-07T18:11:35.2655732+08:00", "intro":"介绍" }

注意:must和should并列,should无效

二、各类查询示例

查询所有索引库的数据

POST /_search

查询索引库db_test中的所有数据

说明:db_test代表所有库(db)

POST /db_test/_search

查询索引库db_test表person中的所有的数据

说明:db_test代表所有库(db),person代表文档

POST /db_test/person/_search 

查询索引库db_test表person中age=3的一条数据

说明:db_test代表所有库(db),person代表文档

POST /db_test/person/_search?q=age:3
//或者这样写(DSL写法)
POST /db_test/person/_search
{
"query": {
"query_string": {
"fields": ["age"],
"query": 3
}
}
}

多字段单分词字段并且条件查询

查询索引库db_test表person中age从500到800,intro包含"研究"的数据

POST /db_test/person/_search
{ "query":{ "bool":{ "must":[
{ "range":{ "age":{ "from":"500","to":"800" }
}
},
{ "term":{ "intro":"研究" }
}]
}
}
}

多字段多分词字段并且分词或者条件

查询索引库db_test表person中age大于500,intro包含"研究"或者"方鸿渐"的数据

POST /db_test/person/_search
{ "query":{ "bool":{ "must":[
{ "range":{ "age":{ "gt":"500" }
}
},
{ "terms":{ "intro":["研究","方鸿渐"]
}
}]
}
}
}

分页/排序/高亮显示

说明:size如果不写默认是10,from如果不写默认是0。取前20条数据,按照age升序,生日降序,并且北京高亮显示。

POST /db_test/person/_search
{ "query": { "term":{"intro":"北京" }
}, "from": 0, "size": 20, "sort":{ "age" : {"order" : "asc"}, "birthday": {"order" : "desc"} } , "highlight" : { "pre_tags" : ["<tag1>", "<tag2>"], "post_tags" : ["</tag1>", "</tag2>"], "fields" : { "intro" : {}
}
}
}

还可以这样写

GET /_search?size=5 GET /_search?size=5&from=5 GET /_search?size=5&from=10

 

单字段多分词或者关系查询

说明:查询intro包含"研究"或者"方鸿渐"。

(这在全文检索时非常有用)

第一种写法:

POST /db_test/person/_search
{
"query":{
"bool":{
"must":[
{
"query_string":{
"default_field":"intro",
"query":"研究方鸿渐"
}
}
]
}
},
"sort": [
{
"birthday": {
"order": "desc"
}
}
]}

第二种写法:

POST /db_test/person/_search
{
"query": {
"query_string": {
"fields": ["intro"],
"query": "研究方鸿渐"
}
},
"sort": [
{
"birthday": {
"order": "asc"
}
}
]
}

第三种写法:

POST /db_test/person/_search
{
"query":{
"bool":{
"should":[
{
"term":{"intro":"研究"} },
{
"term":{"intro":"方鸿渐"}
}
]
}
},
"sort": [
{
"birthday": {
"order": "desc"
}
}
]
}

单字段多分词并且关系查询

intro包含"研究""方鸿渐"的写法如下:

POST /db_test/person/_search
{
"query":{
"bool":{
"must":[
{
"term":{"intro":"研究"} },
{
"term":{"intro":"方鸿渐"}
}
]
}
}
}

多字段多分词 字段或者分词并且关系查询

说明:查询 title中包含"朋友"并且包含"吃饭" 或者 content中包含"朋友"并且包含"吃饭"  title和content中只要有一个中包含"朋友"并且"吃饭"两个关键字就行

复杂条件的范例-----------------------

插入测试数据

PUT /db_news/news/1
{
"title":"我是中国人",
"content":"我爱北京和天安门"
}
PUT /db_news/news/2
{
"title":"我是中国人",
"content":"朋友在一起就是亲家"
}
PUT /db_news/news/3
{
"title":"亲家的朋友",
"content":"我们明天去玩吧"
}
PUT /db_news/news/4
{
"title":"朋友在一起吃饭",
"content":"我们明天去玩吧"
}
PUT /db_news/news/5
{
"title":"朋友在一起吃饭",
"content":"亲家的朋友在一起吃饭"
}
PUT /db_news/news/6
{
"title":"在阿萨德",
"content":"亲家的在一起"
}
PUT /db_news/news/7
{
"title":"在一起",
"content":"按时到岗"
}
PUT /db_news/news/8
{
"title":"在一起吃饭",
"content":"朋友啊吃饭"
}
PUT /db_news/news/9
{
"title":"在一起吃饭",
"content":"朋友啊吃饭"
}

第一种写法

POST /db_news/news/_search
{
"query":{
"bool":{
"should":[
{
"bool": {
"must":[
{ "term":{"title":"朋友"} },
{
"term":{"title":"吃饭"}
}
]
}
}
],
"should":[
{
"bool": {
"must":[
{ "term":{"content":"朋友"} },
{
"term":{"content":"吃饭"}
}
]
}
}
]
}
}
}

第二种写法(参考http://www.elasticsearch.cn/guide/reference/query-dsl/query-string-query.html

POST /db_news/news/_search
{
"query":{
"bool":{
"should":[
{
"query_string":{
"default_field":"title",
"query":"朋友吃饭",
"default_operator":"AND",
"analyzer":"ik"
}
},
{
"query_string":{
"default_field":"content",
"query":"朋友吃饭",
"default_operator":"AND",
"analyzer":"ik"
}
}
]
}
}
}

多字段多分词  字段或者分词或者关系查询

查询 title中包含"朋友"或者包含"吃饭" 或者 content中包含"朋友"或者包含"吃饭"  也就是说只有title和content中包含"朋友"或者"吃饭"两个关键字就行

第一种写法:

POST /db_news/news/_search
{
"query":{
"bool":{
"should":[
{
"term":{"title":"朋友"} },
{
"term":{"title":"吃饭"}
},
{
"term":{"content":"朋友"} },
{
"term":{"content":"吃饭"}
}
]
}
}
}

第二种写法:

POST /db_news/news/_search
{
"query":{
"bool":{
"should":[
{
"terms":{"title":["朋友","吃饭"]} },
{
"terms":{"content":["朋友","吃饭"]} }
]
}
}
}

第三种写法:(对于全文检索比较简单:比如招聘网站,搜索公司名或者职位名包含关键字asp.net 或者mvc这两个关键字任意一个)

POST /db_news/news/_search
{
"query":{
"bool":{
"should":[
{
"query_string":{
"default_field":"title",
"query":"朋友吃饭"
}
},
{
"query_string":{
"default_field":"content",
"query":"朋友吃饭"
}
}
]
}
}
}

查询部分字段数据

说明:只查询age和intro

POST /db_test/person/_search?_source=age,intro

同时查询多个不同的文档

插入测试数据

PUT /db_news
{ "settings" : {
"analysis" : {
"analyzer" : {
"stem" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "stop", "porter_stem"]
}
}
}
},
"mappings" : {
"news" : {
"dynamic" : true,
"properties" : {
"title" : {
"type" : "string",
"indexAnalyzer" : "ik",
"searchAnalyzer":"ik"
},
"content" : {
"type" : "string",
"indexAnalyzer" : "ik",
"searchAnalyzer":"ik"
}
}
}
}
}
PUT /db_news/news/1
{
"title":"第一条新闻",
"content":"我爱北京天安门"
}

测试查询

GET /_mget
{ "docs" : [
{ "_index" : "db_news", "_type" : "news", "_id" : 1 },
{ "_index" : "db_test", "_type" : "person", "_id" : "5bd94e88-10cb-4e9f-9ba6-df8ff8b59081" }
]
}

查询包含一组id的文档集合

GET /db_news/news/_mget
{ "ids" : [ "2", "1" ]
}

批量操作

说明:可以批量添加数据,详情:http://es.xiaoleilu.com/030_Data/55_Bulk.html

POST /_bulk
{ "create": { "_index": "db_news", "_type": "news", "_id": "3" }}
{ "title" : "john@smith.com", "content" : "John Smith" }
{ "create": { "_index": "db_news", "_type": "news", "_id": "4" }}
{ "title" : "john@smdsith.com", "content" : "John Smidth" }

ElasticSearch实战使用的更多相关文章

  1. ElasticSearch实战-入门

    http://www.cnblogs.com/smartloli/ 1.概述 今天接着<ElasticSearch实战-日志监控平台>一文来给大家分享后续的学习,在<ElasticS ...

  2. ElasticSearch实战-日志监控平台

    1.概述 在项目业务倍增的情况下,查询效率受到影响,这里我们经过讨论,引进了分布式搜索套件——ElasticSearch,通过分布式搜索来解决当下业务上存在的问题.下面给大家列出今天分析的目录: El ...

  3. ElasticSearch实战

    ElasticSearch实战-入门 1.概述 今天接着<ElasticSearch实战-日志监控平台>一文来给大家分享后续的学习,在<ElasticSearch实战-日志监控平台& ...

  4. ElasticSearch实战-编码实践

    1.概述 前面在<ElasticSearch实战-入门>中给大家分享如何搭建这样一个集群,在完成集群的搭建后,今天给大家分享如何实现对应的业务功能模块,下面是今天的分享内容,目录如下所示: ...

  5. I-team 博客全文检索 Elasticsearch 实战

    一直觉得博客缺点东西,最近还是发现了,当博客慢慢多起来的时候想要找一篇之前写的博客很是麻烦,于是作为后端开发的楼主觉得自己动手丰衣足食,也就有了这次博客全文检索功能Elasticsearch实战,这里 ...

  6. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  7. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  8. ElasticSearch实战系列四: ElasticSearch理论知识介绍

    前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是 ...

  9. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

  10. ElasticSearch实战系列六: Logstash快速入门和实战

    前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

随机推荐

  1. jQuery easyui 之 expend row

    http://www.jeasyui.com/tutorial/datagrid/datagrid21.php

  2. 【Xamarin报错】AndroidManifest.xml : warning XA0101: @(Content) build action is not supported

    部署xamarin.forms android时报错: Android\Properties\AndroidManifest.xml : warning XA0101: @(Content) buil ...

  3. ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  4. HMM MEMM & label bias

    (http://blog.csdn.net/xum2008/article/details/38147425) 隐马尔科夫模型(HMM): 图1. 隐马尔科夫模型 隐马尔科夫模型的缺点: 1.HMM只 ...

  5. DMSFrame 之简单用法(二)

    上次说了下DMSFrame的一些查询方式,之前也有好多朋友问了下这个ORM与EF有什么样的区别. 要论区别,我自己也总结了几点.如果有其它朋友知道的,可以回复补充下. 1.不需要编辑的时候需要再次查询 ...

  6. 解决linux crontab PHP fgetcsv 读取中文数据为空问题

    公司一台服务器每天定时拉取媒体报告数据,发现每次获取的中文数据为空,发现下载下来的csv文件中文是正常的,手动再次执行一次发现是正常的 现在发现linux的默认地区是 "en_US.UTF- ...

  7. php生成随机密码(php自定义函数)转自先锋教程网

    php生成随机密码(php自定义函数) 时间:2015-12-16 20:43:49来源:网络 导读:php随机密码的生成代码,使用php自定义函数生成指定长度的随机密码,密码规则为小写字母与数字的随 ...

  8. Android应用如何支持屏幕多尺寸多分辨率问题

    作为Android应用程序开发者都知道android是一个“碎片化”的世界.多种系统版本.多种尺寸.多种分辨率.多种机型,还有不同的厂商定制的不同ROM,你开发的应用会在不可预期的手机上报错.这给开发 ...

  9. oracle 空间数据库说明

    转:http://blog.csdn.net/jing_xin/article/details/4355642 由于最近弄一些空间数据,所以找了些oracle空间数据库的一些知识.下面是汇总: Ora ...

  10. iOS 7.1 安装 企业应用 提示 无法下载应用程序

    首先这种情况排除https影响,这个就不提了.请自行查询iOS https 部署. 其次系统版本是iOS 7.1,之后的版本安装都没问题. 说下我是怎么发现问题的,我找了个真机,发现直接调试提示bun ...