Elastic Search对Document的搜索
在ES中使用的重点。ES中存储的数据。核心就是为了提供全文搜索能力的。搜索功能非常重要。多练。
1 query string search
search的参数都是类似http请求头中的字符串参数提供搜索条件的。
GET [/index_name/type_name/]_search[?parameter_name=parameter_value&...]
如: 全数据搜索。也就是没有搜索条件。
GET /test_index/my_type/_search
结果:
{
"took": 8, # 执行的时长。单位毫秒。
"timed_out": false, # 是否超时
"_shards": { # shard 相关数据
"total": 5, # 总计多少个shard
"successful": 5, # 成功返回结果的shard数量
"skipped": 0,
"failed": 0
},
"hits": { # 搜索结果相关数据,
"total": 3, # 总计多少数据,符合搜索条件的数据数量。
"max_score": 1, # 最大相关度分数。和搜索条件的匹配度。
"hits": [ # 具体的搜索结果
{
"_index": "test_index", # 索引名称
"_type": "my_type", # 类型名称
"_id": "2", # id值
"_score": 1, # 匹配度分数,本条数据匹配度分数
"_source": { # 具体的数据内容,源
"name": "test_doc_02",
"remark": "second test elastic search",
"order_no": 2
}
}
]
}
}
GET /index_name/type_name/_search?q=field_name:key_word&sort=field_name:order
如:
GET /test_index/my_type/_search?q=remark:test&sort=order_no:desc
结果:
{
"took":17,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"skipped":0,
"failed":0
},
"hits":{
"total":3,
"max_score":null,
"hits":[
{
"_index":"test_index",
"_type":"my_type",
"_id":"3",
"_score":null,
"_source":{
"name":"test_doc_03",
"remark":"third test elastic search",
"order_no":3
},
"sort":[
3
]
},
{
"_index":"test_index",
"_type":"my_type",
"_id":"2",
"_score":null,
"_source":{
"name":"test_doc_02",
"remark":"second test elastic search",
"order_no":2
},
"sort":[
2
]
},
{
"_index":"test_index",
"_type":"my_type",
"_id":"1",
"_score":null,
"_source":{
"name":"test_doc_01",
"remark":"first test elastic search",
"order_no":1
},
"sort":[
1
]
}
]
}
}
注意:此搜索操作一般只用在快速检索数据使用,如果查询条件复杂,很难构建query string。生产环境中很少使用。如:要求搜索条件为商品名称包含手机,价格在1000~5000之间,销量在每月500以上,根据价格升序排列,分页查询第二页,每页40条数据。
?q=xxxx:xxx&range=xxx:xxx:xxx&aggs&sort&from&size
2 query DSL
DSL - Domain Specified Language , 特殊领域的语言。
GET /index_name/type_name/_search
{
"commond":{ "parameter_name" : "parameter_value"}
}
如:查询所有数据
GET /test_index/my_type/_search
{
"query" : { "match_all" : {} }
}
如:条件查询,排序
GET /test_index/my_type/_search
{
"query" : {
"match" : {
"remark" : "test"
}
},
"sort" : [
{ "order_no" : "asc" }
]
}
如:分页查询
GET /test_index/my_type/_search
{
"query" : { "match_all" : {} },
"from" : 1, # 从第几条数据开始查询,从0开始计数
"size" : 2, # 查询多少数据。
"sort" : [
{ "order_no" : "asc" }
]
}
如:查询部分字段
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": ["name", "tags"],
"from": 1,
"size": 1
}
注意:此搜索操作适合构建复杂查询条件,生产环境常用。
3 query filter
过滤查询。此操作实际上就是query DSL的补充语法。过滤的时候,不进行任何的匹配分数计算,相对于query来说,filter相对效率较高。Query要计算搜索匹配相关度分数。Query更加适合复杂的条件搜索。
如:使用符合条件查询。搜索tags中包含java字符串的数据,且年龄在20~25之间。
不使用filter, 年龄需要计算相关度分数GET /test_index/my_type/_search
{
"query": {
"bool": { # 多条件搜索,内部的若干条件,只要有正确结果,即可。
"must": [ # 必须,内部若干条件,必须都匹配才有结果
{"match": { # 匹配, 字段中必须匹配对应数据才有结果
"tags": "java"
}},
{"range": { # 范围, 字段的数据必须满足某范围才有结果。
"age": {
"gte": 20, # 比较符号 lt gt lte gte
"lte": 25
}
}}
]
}
}
}
使用filter, 假设年龄不需要计算任何的相关度分数。
GET /test_index/my_type/_search
{
"query": {
"bool": { # 多条件搜索,内部的若干条件,只要有正确结果,即可。
"must": [ # 必须,内部若干条件,必须都匹配才有结果
{"match": { # 匹配, 字段中必须匹配对应数据才有结果
"tags": "java"
}},
{"range": { # 范围, 字段的数据必须满足某范围才有结果。
"age": {
"gte": 20, # 比较符号 lt gt lte gte
"lte": 25
}
}}
]
}
}
}
4 full-text search
全文检索。要求查询条件拆分后的任意词条与具体数据匹配就算搜索结果。查询结果顺序默认与匹配度分数相关。
搜索 tags中包含 java php .net的数据。
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java php .net sales"
}
}
}
5 phrase search
短语检索。要求查询条件必须和具体数据完全匹配才算搜索结果。
GET /test_index/my_type/_search
{
"query": {
"match_phrase": {
"tags": "java developer"
}
}
}
6 highlight display
高亮显示。高亮不是搜索条件,是显示逻辑。在搜索的时候,经常需要对条件实现高亮显示。
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java sales developer"
}
},
"highlight": {
"fields": {
"tags": {
"number_of_fragments": 1,
"fragment_size": 1
}
}
}
}
Elastic Search对Document的搜索的更多相关文章
- Elastic Search中Document的CRUD操作
一. 新增Document在索引中增加文档.在index中增加document.ES有自动识别机制.如果增加的document对应的index不存在.自动创建,如果index存在,type不存在自动创 ...
- Elastic Search 小调研
一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...
- 教你用Elastic Search:运行第一条Hello World搜索命令
摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...
- SpringMVC项目使用elastic search搜索
项目需要,引入了elastic search(后续简称es),后面将介绍本地对es的安装,使用以及java连接es查询的整个过程. 1.es索引字段建立与修改,以curl新增一个索引字段示例 curl ...
- Elastic Search快速上手(2):将数据存入ES
前言 在上手使用前,需要先了解一些基本的概念. 推荐 可以到 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htm ...
- Elastic Search常用元数据简介
在ES中,除了定义的index,type,和管理的document外,还有若干的元数据.这些元数据用于记录ES中需要使用的核心数据.在ES中,元数据通常使用下划线’_’开头. 1 查看数据GET /i ...
- Elastic Search笔记
目录 1.简介 2.概念和工具使用 2.1 基本概念 2.2 使用kibana 3.操作索引和数据 2.3 索引 2.4 索引映射到文档 2.5 新增数据 2.6 修改数据 2.7 删除数据 4. 搜 ...
- elastic search book [ ElasticSearch book es book]
谁在使用ELK 维基百科, github都使用 ELK (ElasticSearch es book) ElasticSearch入门 Elasticsearch入门,这一篇就够了==>http ...
- 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》
本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...
随机推荐
- codeforces#1183H. Subsequences(字符串dp)
题目链接: http://codeforces.com/contest/1183/problem/H 题意: 给出一个长度为$n$的字符串,得到$k$个子串,子串$s$的花费是$n-|s|$ 计算最小 ...
- Navicat Premium 12 卸载和注册表的删除
卸载就不用我说了,win10也好,win7也好直接windows设置里的卸载,或者你觉得别的软件卸载的比较干净也行 不过还是不会删掉注册表,甚至文件夹都不删除, ... 这是卸载 ,在此说一下,为了安 ...
- Ranorex连接Android
开始在Android上进行移动测试 只需按照下面的步骤开始使用Android进行移动测试. 1.连接设备(USB/Wi-Fi) 2.在Ranorex中添加设备 3.将设备名称设置为参数值 4.运行示例 ...
- heartrbeat实现web服务器高可用
今天的内容是用heartbeat实现web服务器高可用 一.简介: heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行 ...
- PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)
在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...
- MySql数据类型及对应存储空间
整数型数据类型 类型名称 说明 存储需求 TINYINT 很小的正数 1个字节 SMALLINT 小正数 2个字节 MEDIUMINT 中等大小的正数 3个字节 INT(INTEGER) 普通大小的正 ...
- 爬虫实践——数据存储到Excel中
在进行爬虫实践时,我已经爬取到了我需要的信息,那么最后一个问题就是如何把我所爬到的数据存储到Excel中去,这是我没有学习过的知识. 如何解决这个问题,我选择先百度查找如何解决这个问题. 百度查到的方 ...
- linux 下安装redis并用QT写客户端程序进行连接
1.安装redis.使用如下命令: wget http://dowload.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd ...
- Bootstrap4项目开发实战视频教程
一.企业网站项目 课件 0.课程简介 1.顶部区域的制作 2.导航区域的制作 3.轮播区域的制作 4.产品区域的制作 5.最新资讯区域的制作 6.底部区域的制作 二.化妆品网站项目 1.项目初始化_导 ...
- ORA-00054: 资源正忙 --锁表的解决方法
问题描述 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 发生异常 原因:其他Session已经对目标表做了操作,且未提交操作,导致锁表,新的Session无法 ...