目录
扫描二维码关注公众号,回复:
8801159 查看本文章
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