【Elasticsearch】4. Search API

2020-12-15 19:54:06 浏览数 (1)

Search API

  • URI Search:在URL中使用查询参数
  • Request Body Search:使用Elasticsearch提供的,基于json格式的更加完备的Query Domain Speacific Language(DSL)

指定查询的索引

  • /_search:集群上所有的索引
  • /index1/_search:index1
  • /index1,index2/_search:index1和index2
  • /index/_search:以index开头的索引

URI查询

  • 使用"q",指定查询字符串
  • "query string syntax",kv查询字符串
  • eg:curl -XGET "http://localhost:9200/movies/_search?q=title:Toy Story",
    • q用来表示查询的内容
    • 搜索叫做toy stroy 的电影

Request Body

  • eg: curl -XGET "http://localhost:9200/movies/_search" -H 'Content-Type: application/json' -d '{"query": {"match_all": {}}}'
    • -XGET:支持post和get
    • movies:需要操作的索引名
    • _search:执行搜索的操作
    • query:查询
    • match_al:返回所有文档

URI Search - 通过URI query 实现搜索

GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s

{

"profile": true

}

  • q 指定查询语句,使用query string syntax
  • df 默认子都拿,不指定时,会对有所字段进行查询
  • sort 排序/ from 和 size 用于分野
  • profile 可以查看查询是如何被执行的

URI Search Deom

  • 指定字段查询
    • GET movies/_search?q=2012&df=title
    • GET movies/_search?q=title:2012
  • 泛查询
    • GET movies/_search?q=2012
    • GET movies/_search?q=title:Beautiful Mind

Query string Syntax

  • 指定字段 vs 泛查询
    • q=title:2012 / q=2012
  • Term vs Phrase
    • Beautiful Mind 等效于 Beautiful OR Mind
    • "Beautiful Mind",等效于 Beautiful AND MIND。Phrase查询,还要求前后
  • 分组与引号
    • title:(Beautiful AND Mind)
    • title="Beautiful Mind"
  • 布尔操作
    • AND / OR / NOT 或者 && / || / !
      • 必须大写
      • tiltle:(matrix NOT reloaded)
  • 分组
    • 表示must
    • - 表示must_not
    • tilte:( matrix -reloaded)
  • 范围查询
    • 区间表示:[]闭区间,{}开区间
      • year:{2019 TO 2018]
      • year:[* TO 2018]
  • 算数符号
    • year:>2010
    • year:(>2010 && <=2018)
    • year:( >2010 <2018)
  • 通配符查询(通配符查询效率太低,占用内存大,不建议使用,特别是放在最前面)
    • ?代表1个字符,*代表0或多个字符
      • title:mi?d
      • title:be*
  • 正则表达
    • title:[bt]oy
  • 模糊匹配与近似匹配
    • title:befutifl~1
    • title:"lord rings"~2

 Request Body Search

  • 将查询语句通过http request body 发送给es
  • Query DSL
  • 分页
  • From从0开始,默认返回10个结果
  • 获取考后的翻页成本较高
  • 排序
  • 最好在"数字型"和"日期型"字段上排序
  • _source filtering
  • 如果_source 没有存储,那就只返回匹配的文档的元数据
  • _source 支持使用通配符
  • 脚本字段
    • eg:订单中有不同汇率,需要对不同汇率进行结算排序
  • 使用查询表达式 - Match
  • 短语搜索 -Match Phrase

query string && simple query string

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

0 人点赞