一、Search API概览

1、Search API
(1)URL Search

  • 在URL中使用查询参数
  • 使用“q”,指定查询字符串
  • “query string syntax”,kv键值对
    在这里插入图片描述

(2)Request Body Search

  • 使用ElasticSearch提供的,基于JSON格式的更加完备的Query Domian Specific Language(DSL)
    在这里插入图片描述

2、指定查询的索引

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

3、搜索Response
在这里插入图片描述
4、搜索的相关性Relevance
(1)搜索时用户和搜索引擎的对话
(2)用户关系的是搜索结果的相关性

  • 是否可以找打所有相关的内容
  • 有多少不相关的日内容被返回了
  • 文档的打分是否合理
  • 结合业务需求,平衡结果排名
  • 在这里插入图片描述

5、URL Search-通过URI query实现查询
我们可以使用postman、curl、浏览器等方式来实现,如:

 curl "http://192.168.25.143:9200/movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s" -X GET

在这里插入图片描述

  • q指定程序语句,使用Query String Syntax
  • df默认字段,指定时,会对所有字段进行查询
  • Sort培训/from和size用于分页
  • profile可以查看查询是如何被执行的

6、Query String Syntax(1)
(1)指定字段v.s泛查询

  • q=title:2012 / q=2012&df=title

(2)Term v.s Phrase

  • Beautiful Mind等效与Beautiful OR Mind
    用Term查询Beautiful Mind,那么查询结果中包含Beautiful 或者Mind
    在这里插入图片描述
    在这里插入图片描述

  • “Beautiful Mind”等效于Beau AND Mind。Phrase查询,还要求前后查询顺序保持一致
    如果用Phrase查询Beautiful Mind,那么查询内容要被引号包括起来,查询出来的结果内容和顺序必须和查询内容保持一致
    在这里插入图片描述在这里插入图片描述

7、Query String Synatx(2)
在使用分组查询的时候,我只想其中的其中的几个词出现,另外的词不出现,或者出现,可以使用以下方式
(1)方式一

  • AND / OR / NOT或者 && / || / !
  • 必须大写
  • title:(NOT Beautiful AND Mind)

(2)方式二

  • +表示must
  • -表示must_not
  • title:(-Beautiful +Mind)

8、Query String Syntax(3)
(1)范围查询

  • 区间表示:[]闭区间,{}开区间
  • year:[2019 TO 2018]
  • year:[* TO 2018]

(2)算数符号

  • year:>2010
  • year:(>2010 && <=2018)
  • year:(+>2010 +<=2018)

9、Query String Syntax(4)
(1)通配符查询(通配符查询效率低,占用内存大,不建议使用。特别是放在最前面)

  • ?代表1个字符,*代表0或多个字符
  • title:mi?d
  • title:be*

(2)正则表达式

  • title:[bt]oy

(3)模糊匹配与近似查询

  • title:befutifl~1
  • title:“lord rings”~2

二、Request Body与Query DSL简介

1、Request Body Search

  • 将查询语句通过HTTP Request Body发送给ElasticSearch
  • Query DSL
    这是查询movies下的所有文档
    在这里插入图片描述

2、分页

  • from从0开始,默认返回10个结果
  • 获取靠后的翻页成本比较高
    在这里插入图片描述

3、排序

  • 最好在“数字型”与“日期型”字段上排序
  • 因为对于对类型或者分析过的字段排序,系统会选一个值,无法得知该值
    在这里插入图片描述
    4、_source filtering
  • 如果_source没有存储,那就只返回匹配的文档的元数据
  • _source支持通过配符,例如:_source:[“name*”,“desc*”]
    在这里插入图片描述

5、使用查询表达式-Match
在这里插入图片描述
使用这样的查询,默认会查询到title字段中有Beautiful、Mind或者Beautiful Mind
如果只想查询Beautiful Mind可以使用下面这个语句:
在这里插入图片描述
6、短语搜索-Match Phrase
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询结果的title字段中必须包含“Beautiful Mind”,slop有文档的title字段“Beautiful Mind”中间如果有一个字符也会查询出来

三、Query String&Simple Query String查询

1、Query String Query

  • 类似与URI Query

users索引下有三个文档
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、Simple Query String Query

  • 类似Query String,但是会忽略错误的语法,同时只支持部分查询语法
  • 不支持AND OR NOT,会当作字符串处理
  • Term之间默认的关系是OR,可以指定Operator
  • 支持部分逻辑
  • +代替AND
  • |代替OR
  • -代替NOT
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐