一、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/_search

index1

/index1,index2/_search

index1和index2

/index*/_search

以index开头的索引

3、搜索Response

es curl 执行 es curl 查询_elasticsearch


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

es curl 执行 es curl 查询_elasticsearch_02

  • 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
  • es curl 执行 es curl 查询_搜索_03


  • es curl 执行 es curl 查询_字段_04

  • “Beautiful Mind”等效于Beau AND Mind。Phrase查询,还要求前后查询顺序保持一致
    如果用Phrase查询Beautiful Mind,那么查询内容要被引号包括起来,查询出来的结果内容和顺序必须和查询内容保持一致
  • es curl 执行 es curl 查询_es curl 执行_05

    es curl 执行 es curl 查询_字段_06

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

es curl 执行 es curl 查询_分页_07


使用这样的查询,默认会查询到title字段中有Beautiful、Mind或者Beautiful Mind

如果只想查询Beautiful Mind可以使用下面这个语句:

es curl 执行 es curl 查询_elasticsearch_08


6、短语搜索-Match Phrase

es curl 执行 es curl 查询_elasticsearch_09


es curl 执行 es curl 查询_elasticsearch_10


es curl 执行 es curl 查询_elasticsearch_11


es curl 执行 es curl 查询_字段_12

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

三、Query String&Simple Query String查询

1、Query String Query

  • 类似与URI Query

users索引下有三个文档

es curl 执行 es curl 查询_搜索_13

es curl 执行 es curl 查询_elasticsearch_14


es curl 执行 es curl 查询_分页_15

es curl 执行 es curl 查询_分页_16

es curl 执行 es curl 查询_搜索_17

2、Simple Query String Query

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