@@注意:本篇笔记使用的ElasticSearch7.5
1.搜索形式
ElasticSearch
搜索形式,分为两种:URI Search
和Request Body Search
1.1 URI Search
请求形式
curl -XGET "http://elasticsearch:9200/test_db/_search?q=name:张"
|
1.2 Request Body Search
请求形式
在 ElasticSearch
中一些高阶用法只能在 Request Body
里做,所以我们尽量使用 Request Body Search
,它支持 GET
和 POST
方式对索引进行查询
curl -XGET "http://elasticsearch:9200/test_db/_search" -H 'Content-Type: application/json' -d'{ "query": { "match": { "name": "张" } } }'
curl -XPOST "http://elasticsearch:9200/test_db/_search" -H 'Content-Type: application/json' -d'{ "query": { "match": { "name": "张" } } }'
|
2.搜索结果分析
2.1 返回格式和说明
{ "took":0, "timed_out":false, "_shards":{ "total":1, "successful":1, "skipped":0, "failed":0 }, "hits":{ "total":{ "value":1, "relation":"eq" }, "max_score":1.0296195, "hits":[ { "_index":"test_db", "_type":"_doc", "_id":"pkCkRHgBl3R2rXlflr9j", "_score":1.0296195, "_source":{ "name":"张三封", "age":19, "home":"北京昌平" } } ] } }
|
3.URI Search
使用
3.1 参数列表
参数 |
描述 |
q |
在全文中搜索str ,q=str 或者q=字段:str |
df |
指定在哪个字段查询,不指定时会对所有字段进行查询 |
analyzer |
当分析查询字符串的时候使用的分词器. |
sort |
根据字段名排序,?sort=x:desc (倒序),默认正序 |
from |
返回的索引匹配结果的开始值,默认为 0 |
size |
搜索结果返回的条数,默认为 10 |
timeout |
设置查询超时时间,单位ms(毫秒) 如:?timeout=1ms |
_source_includes |
只返回索引中指定的列,多个列中间用逗号分开。 如:/_search?_source_includes=name,age |
_source_excludes |
返回结果中不包含的字段多个列中间用逗号分开。 如:/_search?_source_excludes=name,age |
_score |
是否返回字段信息,默认true:都返回 |
explain |
在每个返回结果中,包含评分机制的解释,默认:false |
terminate_after |
设置每个分片中查询的最大条数,如果设置结果中会有一个terminated_early |
search_type |
搜索的类型,合适类型能提高搜索性能,类型有:dfs_query_then_fetch
query_then_fetch ,默认:query_then_fetch |
default_operator |
多个条件的关系,AND 或者 OR,默认为 OR |
4. q
4.1 所有字段中搜索
http://elasticsearch:9200/test_db/_search?q=张
|
4.2 指定字段中搜索
http://elasticsearch:9200/test_db/_search?q=name:张
|
使用 http://elasticsearch:9200/test_db/_search?q=张&df=name
一样可以实现一样的效果
4.3 多字段查询
http://elasticsearch:9200/test_db/_search?q=name:张 王
http://elasticsearch:9200/test_db/_search?q=name:张 age:21&default_operator=AND
|
4.4 比较查询
curl -XGET "http://elasticsearch:9200/test_db/_search?q=age:<=21"
|
4.5 范围查询
仅用数字类型,日期也是数字类型
表示符号
使用示例
year:({2019 TO 2020]) 表示 2019 < year <= 2020。 year:([* TO 2020]) 表示 year <= 2020。 year:({2019 TO *}) 表示 year > 2019。
|
4.6 布尔查询
表示符号
使用示例
http://elasticsearch:9200/test_db/_search?q=name:(%2B张)
http://elasticsearch:9200/test_db/_search?q=name:(%2B张 -三)
http://elasticsearch:9200/test_db/_search?q=name:(-张 -三)
|
4.7 词组查询
http://elasticsearch:9200/test_db/_search?q="NO ABC"
|
进行词组查询时,被查找的词必须用“”
引住,引住后会被当成一个单词查询
5.analyzer
(分词器)
系统默认分词器有:keyword
、standard
、simple
等等,也支持第三方分词器,如IK
。
需要注意的是,在指定分词器参数的时候必须要使用q
进行字段查询。
5.1 使用分词器:keyword
第一步: 先分析分词器:keyword
,会把字符串张三封
分词成什么样,如下图:
第二步: 使用分词器查询
http://elasticsearch:9200/test_db/_search?q=张三封&analyzer=keyword
|
5.2 使用分词器:standard
第一步: 先分析分词器:standard
,会把字符串张三封
分词成什么样,如下图:
第二步: 使用分词器查询
http://elasticsearch:9200/test_db/_search?q=张三封&analyzer=standard&df=name
|
6.sort
(排序)
http://elasticsearch:9200/test_db/_search?sort=age
http://elasticsearch:9200/test_db/_search?sort=age:desc
|
7.from,size
(分页)
http://elasticsearch:9200/test_db/_search?from=0&size=1
http://elasticsearch:9200/test_db/_search?from=0&size=2
|
8.返回字段处理
_source_includes=a,b
: 指定只返回a,b
字段
_source_excludes=a,b
:指定不返回a,b
字段
_score=false
:什么字段都不返回
http://elasticsearch:9200/test_db/_search?_source_includes=name,age
http://elasticsearch:9200/test_db/_search?_source_excludes=home
http://elasticsearch:9200/test_db/_search?_score=false
|
9.评分机制
http://elasticsearch:9200/test_db/_search?q=张&explain=true
|
10.设置分片返回数量
http://elasticsearch:9200/test_db/_search?q=张&terminate_after=1
|