IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch搜索文档 -> 正文阅读

[大数据]Elasticsearch搜索文档

请求路径:/索引/_search
请求方式:GET

{ 
	"query":{ 
		搜索方式:搜索参数 
	} 
}

1. 搜索方式

  1. match_all:查询所有数据
    搜索参数: {}
  2. match:全文检索。将查询条件分词后再进行搜索。
    搜索参数: { 搜索字段:搜索条件 }
  3. match_phrase:短语检索。搜索条件不做任何分词解析,在搜索字对应的倒排索引中精确匹配。
    搜索参数: { 搜索字段:搜索条件 }
  4. range:范围搜索。对数字类型的字段进行范围搜索
    搜索参数: { 搜索字段:{ “gte”:最小值, “lte”:最大值 } }
    gt/lt:大于/小于 gte/lte:大于等于/小于等于
  5. term/terms:单词/词组搜索。搜索条件不做任何分词解析,在搜索字对应的倒排索引中精确匹配
    term参数: { 搜索字段: 搜索条件 }
    terms参数: { 搜索字段: [搜索条件1,搜索条件2] }

补充:在搜索时关键词有可能会输入错误,ES搜索提供了自动纠错功能,即ES的模糊查询。使用
match方式可以实现模糊查询。模糊查询对中文的支持效果一般。

{
	 "query": { 
	 	"match": { 
	 		"域名": { 
	 			"query": 搜索条件, 
	 			"fuzziness": 最多错误字符数,不能超过2 
	 		} 
	 	} 
	 } 
}

2.复合搜索

路径: /索引/_search
请求方式:GET
请求体:

{ 
	"query": { 
		"bool": { 
			// 必须满足的条件
			"must": [ 
				搜索方式:搜索参数, 
				搜索方式:搜索参数 
			],
			// 多个条件有任意一个满足即可 
			"should": [ 
				搜索方式:搜索参数, 
				搜索方式:搜索参数 
			],
			// 必须不满足的条件 
			"must_not":[ 
				搜索方式:搜索参数, 
				搜索方式:搜索参数 
			] 
		} 
	} 
}

3.结果排序

ES中默认使用相关度分数实现排序,可以通过搜索语法定制化排序。
请求体:

{ 
	"query": 搜索条件, 
	"sort": [
	 	{ 
	 		"字段1":{
	 			 "order":"asc" 
	 			} 
	 		},
	 		{ 
	 		"字段2":{ 
	 			"order":"desc" 
	 		} 
	 	} 
	 ] 
}
例如:
GET /people/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "desc": "NBA"
          }
        },
        {
          "match_phrase": {
            "desc": "运动员"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "id": {
        "order": "asc"
      }
    }
  ]
}
//排序结果
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : null,
        "_source" : {
          "id" : 1001,
          "name" : "湖人俱乐部的戴维斯",
          "desc" : "戴维斯是NBA最伟大的运动员之一"
        },
        "sort" : [
          1001
        ]
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : null,
        "_source" : {
          "id" : 1002,
          "name" : "湖人俱乐部的科比",
          "desc" : "科比是NBA最伟大的运动员之一"
        },
        "sort" : [
          1002
        ]
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "id" : 1003,
          "name" : "湖人俱乐部的詹姆斯",
          "desc" : "詹姆斯是NBA最伟大的运动员之一"
        },
        "sort" : [
          1003
        ]
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "id" : 1004,
          "name" : "湖人俱乐部的奥尼尔",
          "desc" : "奥尼尔是NBA最伟大的运动员之一"
        },
        "sort" : [
          1004
        ]
      }
    ]
  }
}

注意:
由于ES对text 类型字段数据会做分词处理,使用哪一个单词做排序都是不合理的,所以 ES中默认
不允许对text 类型的字段做排序。如果需要使用字符串做结果排序,可以使用 keyword 类型的字
段作为排序依据,因为 keyword 字段不做分词处理。

4.分页查询

请求体:

{ 
	"query": 搜索条件, 
	"from": 起始下标, 
	"size": 查询记录数 
}
//例如
GET /people/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 3
}
//分页结果
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : null,
        "_source" : {
          "id" : 1004,
          "name" : "湖人俱乐部的奥尼尔",
          "desc" : "奥尼尔是NBA最伟大的运动员之一"
        },
        "sort" : [
          1004
        ]
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : null,
        "_source" : {
          "id" : 1003,
          "name" : "tom",
          "desc" : "tom is the best player"
        },
        "sort" : [
          1003
        ]
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "id" : 1003,
          "name" : "湖人俱乐部的詹姆斯",
          "desc" : "詹姆斯是NBA最伟大的运动员之一"
        },
        "sort" : [
          1003
        ]
      }
    ]
  }
}

5.高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。如:
在这里插入图片描述
为什么在网页中关键字会显示不同的颜色,我们通过开发者工具查看网页源码:
在这里插入图片描述
我们可以在关键字左右加入标签字符串,数据传入前端即可完成高亮显示,ES可以对查询出的内容中关
键字部分进行标签和样式的设置。
请求体:

{ 
	"query":搜索条件, 
	"highlight":{ 
		"fields": { 
			"高亮显示的字段名": { 
			// 返回高亮数据的最大长度 
			"fragment_size":100, 
			// 返回结果最多可以包含几段不连续的文字
			"number_of_fragments":5 
		} 
	},
	"pre_tags":["前缀"], 
	"post_tags":["后缀"] 
	} 
}
//例如
GET /people/_search
{
  "query": {
    "match": {
      "desc": "运动员"
    }
  },
  "highlight": {
    "fields": {
      "desc":{
        "fragment_size": 20,
        "number_of_fragments": 5
      }
    },
    "pre_tags": ["<em>"],
    "post_tags": ["</em>"]
  }
}
//高亮测试结果
{
  "took" : 184,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4,
      "relation" : "eq"
    },
    "max_score" : 0.8559005,
    "hits" : [
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.8559005,
        "_source" : {
          "id" : 1002,
          "name" : "湖人俱乐部的科比",
          "desc" : "科比是NBA最伟大的运动员之一"
        },
        "highlight" : {
          "desc" : [
            "科比是NBA最伟大的<em>运动员</em>之一"
          ]
        }
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.8218762,
        "_source" : {
          "id" : 1003,
          "name" : "湖人俱乐部的詹姆斯",
          "desc" : "詹姆斯是NBA最伟大的运动员之一"
        },
        "highlight" : {
          "desc" : [
            "詹姆斯是NBA最伟大的<em>运动员</em>之一"
          ]
        }
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.79045355,
        "_source" : {
          "id" : 1001,
          "name" : "湖人俱乐部的戴维斯",
          "desc" : "戴维斯是NBA最伟大的运动员之一"
        },
        "highlight" : {
          "desc" : [
            "戴维斯是NBA最伟大的<em>运动员</em>之一"
          ]
        }
      },
      {
        "_index" : "people",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.76134515,
        "_source" : {
          "id" : 1004,
          "name" : "湖人俱乐部的奥尼尔",
          "desc" : "奥尼尔是NBA最伟大的运动员之一"
        },
        "highlight" : {
          "desc" : [
            "奥尼尔是NBA最伟大的<em>运动员</em>之一"
          ]
        }
      }
    ]
  }
}

6.SQL查询

在ES7之后,支持SQL语句查询文档:

GET /_sql?format=txt 
{ 
	"query": SQL语句 
}
例如
GET /_sql?format=txt
{
  "query":"select *from people"
}
//查询结果
         desc         |      id       |     name      
----------------------+---------------+---------------
tom is the best player|1003           |tom            
戴维斯是NBA最伟大的运动员之一      |1001           |湖人俱乐部的戴维斯      
科比是NBA最伟大的运动员之一       |1002           |湖人俱乐部的科比       
詹姆斯是NBA最伟大的运动员之一      |1003           |湖人俱乐部的詹姆斯      
奥尼尔是NBA最伟大的运动员之一      |1004           |湖人俱乐部的奥尼尔 
//又例如
GET /_sql?format=txt
{
  "query":"select *from people",
  "filter":{
    "match":{
      "name":"tom"
    }
  }
}
//查询结果
        desc         |      id       |     name      
----------------------+---------------+---------------
tom is the best player|1003           |tom            

开源版本的ES并不支持通过Java操作SQL进行查询,如果需要操作 SQL查询,则需花钱买版

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:41:10  更:2021-11-30 15:43:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:08:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码