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/_search index1
/index1,index2/_search index1和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

  1. 支持 POST 和 GET,查询参数用 JSON 格式表示
GET /kibana_sample_data_ecommerce/_search
{
	"query":{
		"match_all":{}
	}
}

探索结果 Response 响应参数:took 花费的时间;total 符合条件的总文档数;hits 结果集,默认前10个文档;_index 索引名;_id 文档 id;_socre 相关度算分;_source 文档原始信息
Elasticsearch Search Query(查询介绍)

搜索相关性 Relevance

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

衡量相关性

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

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

总结

上一篇:1438. 绝对差不超过限制的最长连续子数组


下一篇:Mind Master Pro 8.0——安装教程