(3)ElasticSearch基本的查询语句
一、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、指定查询的索引语法范围/_searc
一、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
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
更多推荐
所有评论(0)