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 Search Query(查询介绍) -> 正文阅读

[大数据]Elasticsearch Search Query(查询介绍)


前言

Elasticsearch 查询分为 URI Search 和 Request Body Search,URI Search 是在URL中使用查询参数,Request Body Search 使用 Elasticsearch 提供的基于JSON格式的 Query Domain Specific Language(DSL)

语法范围
/_search集群上所有的索引
/index1/_searchindex1
/index1,index2/_searchindex1和index2
/index*/_search以index开头的索引

URI 查询

  1. 使用 “q”,指定查询字符串,然后用KV键值对来指定要查询的字段和条件(q表示查询内容,后面的KV键值对表示查询字段和条件)。
    GET /kibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie
  2. df 默认字段,q里面的查询字段不指定时查询这个字段,如果q里面没有指定字段,也没有默认字段,则查所有字段。sort 排序、from 和 size 用于分页、profile 可以查看查询是如何被执行的
    GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
    {
    	"profile":true
    }
    
  3. 查询条件
    - 指定字段 vs 泛查询: q=title:2012 / q=2012
    - Term vs Phrase: Term 查询时 Beautiful Mind = Beautiful OR Mind,Phrase 查询时 Beautiful Mind = Beautiful AND Mind 还要求前后顺序保存一致
    - 分组和引号: title:(Beautiful AND Mind) title=“Beautiful Mind”
    - 布尔操作: AND / OR / NOT(必须大写) 或者 && / || / ! title:(matrix NOT reloaded)
    - 分组: + 表示 must - 表示 must_not title:(+matrix -reloaded)
    - 范围查询:[] 闭区间 year:[* TO 2018] {} 开区间 year:{2018 TO 2019}
    - 算数符号:> year:>2010、<= year:(>2010 && <= 2018)、>= year:(+>2010 +<= 2018)
    - 通配符查询(查询效率低,占用内存大,不建议使用):? 代表1个字符 title:mi?d,* 代表0或者多个字符 title:be*
    - 正则表达式:title:[bt]oy
    - 模糊匹配和近似查询:title:beautifl~1 title:“lord rings”~2

Request Body

支持 POST 和 GET,查询参数用 JSON 格式表示

GET /kibana_sample_data_ecommerce/_search
{
	"profile":true,
	"query":{
		"match_all":{}
	}
}

探索结果 Response 响应参数:took 花费的时间;total 符合条件的总文档数;hits 结果集,默认前10个文档;_index 索引名;_id 文档 id;_socre 相关度算分;_source 文档原始信息
在这里插入图片描述

  1. 分页参数:from 从10开始、size 返回多少结果,越靠后,翻页成本越高
    POST /kibana_sample_data_ecommerce/_search
    {
      "from":10,
      "size":20,
      "query":{
        "match_all":{}
      }
    }
    
  2. 排序参数:sort 最好在"数字型"和"日期型"字段上排序
    GET kibana_sample_data_ecommerce/_search
    {
      "sort":[{"order_date":"desc"}],
      "from":10,
      "size":5,
      "query":{
        "match_all":{}
      }
    }
    
  3. _source filtering(查询结果字段过滤):_source 支持使用通配符 _source[“name*”,“desc*”],如果 _source 没有存储,那就只返回元数据
    GET kibana_sample_data_ecommerce/_search
    {
      "_source":["order_date","category.keyword"],
      "from":10,
      "size":5,
      "query":{
        "match_all":{}
      }
    }
    
  4. 脚本字段:script_fields 如果业务比较复杂,还可以自己定义脚本去执行
    GET kibana_sample_data_ecommerce/_search
    {
      "script_fields":{
        "new_field":{
          "script":{
            "lang":"painless",
            "source":"doc['order_date'].value+'hello'"
          }
        }
      },
      "from":10,
      "size":5,
      "query":{
        "match_all":{}
      }
    }
    
  5. 查询表达式:match、match Phrase(短语搜索)
    -- match
    GET /comments/_doc/_search
    {
    	"query":{
    		"match":{
    			"comment":"Last Christmas"
    		}
    	}
    }
    GET /comments/_doc/_search
    {
    	"query":{
    		"match":{
    			"comment":"Last Christmas",
    			"operator":"AND"
    		}
    	}
    }
    -- match phrase 
    GET /comments/_doc/_search
    {
    	"query":{
    		"match_phrase":{
    			"comment":{
    				"query":"Song Last Chrismas",
    				"slop":1				-- 每个词间隔的数量
    			}
    		}
    	}
    }
    

搜索相关性 Relevance

  1. 当用户通过搜索引擎搜索相关结果时,关心的是搜到结果是否有相关性,相关性包括:是否可以找到所有相关的内容、有多少不相关的内容被返回了、文档的打分是否合理、结合业务需求,平衡结果排名。
  2. 通常搜索不仅仅关心内容,还要看内容的可信度。
  3. 搜索引擎除了搜索外,还会扮演其它角色,比如电商网站搜索需要提高用户购物体验、提升销售额、去库存。

衡量相关性

查询相关性(Information Retrieval)可以从几个方面来看:Precision(查准率)、Recall(查全率)、Ranking(相关度排序),可以使用 ES 的查询相关参数来改善搜索的 Precision 和 Recall。

  1. Precision(查准率) = True Positive(匹配正确的) / 全部返回的结果
  2. Recall = True Positive / 所有应该返回的结果

总结

这里只简单的介绍 Elasticsearch 有关的查询,包括 URI 和 Request Body 查询,URI 适合简单的查询,Request Body 适合复杂的查询,程序里一般用得多的是 Request Body。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:53:03  更:2021-08-02 10:53:42 
 
开发: 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年5日历 -2024/5/22 5:17:08-

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