Search API 概述

目录

 

URI Search

指定字段   vs   泛查询

TermQuery  vs  PhraseQuery

布尔操作

范围查询

通配符查询

Request Body Search

分页

排序

扫描二维码关注公众号,回复: 8801159 查看本文章

_source filtering

使用查询表达式match

短语搜索match phrase

Query String

Simple Query String

搜索Response


URI Search

使用http get的方式在url中使用查询参数(通过uri参数实现搜索)

  • q指定查询语句
  • df默认字段,不指定时则为所有字段
  • Sort 排序  
  • from和size用于分页
  • Profile可以看到查询是怎样被执行的
用q来表示查询内容,搜索叫Eddie的客户

curl -XGET "http://127.0.0.1:9200/kibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie"

实例:

GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10
{
  "profile": "true"
}

结果:(类型是TermQuery,且仅查询了title中包含2012的)

指定字段   vs   泛查询

  • 指定字段搜索到了1个结果,查询类型是TermQuery,针对的是title字段
  • 泛查询搜索到了219个结果,查询类型为 DisjunctionMaxQuery,会对id,title,分类等全部字段做了一个查询,这样查询的性能结果并不是特别好的

TermQuery  vs  PhraseQuery

  • Beautiful Mind 等效于 Beautiful Or Mind
  • "Beautiful Mind",等效于 Beautiful And Mind,Phrase查询,还要求前后顺序一致
  • PhraseQuery需要把查询的句子用引号引起来(引号)
  • TermQuery需要用括号括起来(分组)

布尔操作

AND / NOT /OR(默认)

  • 必须大写
  • 分组 +表示must -表示must_not 

范围查询

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

通配符查询

通配符查询效率低,占用内存大,不建议使用,特别是放到前面的时候

Request Body Search

使用Elasticsearch提供的,基于json格式的更加完备的查询语言(DSL)

分页

  • from从0开始,默认返回10个结果
  • 获得靠后的翻页成本较高

排序

  • 最好是在数字型,日期型字段上排序

_source filtering

  • 如果source没有存储,那就只返回匹配的文档的元数据

使用查询表达式match

  • 默认是or

短语搜索match phrase

  • query你希望在字段中找到的文本
  • slop匹配令牌间允许的最大位置数

Query String

  • 使用具有严格语法的解析器(会根据操作符,and,or等提供的解析和拆分查询的字符串),基于提供的查询字符串返回文档
  • default_field希望搜索的默认字段
  • 默认的operator是or,可以自己指定default_operator

    

Simple Query String

  • 类似Query String ,但允许错误语法
  • 不支持AND OR NOT ,会当作字符处理
  • 支持部分逻辑 +替代 AND |替代OR  -替代NOT

搜索Response

发布了107 篇原创文章 · 获赞 18 · 访问量 6321

猜你喜欢

转载自blog.csdn.net/qq_43109978/article/details/100526587