Elasticsearch 版本 7.6.2
简单检索
1.查询指定索引写的信息。
curl -XGET 'localhost:9200/test/_search?q=user:ZHANGSAN&pretty'
2.查询所有索引中的信息:
curl -XGET 'localhost:9200/_search?q=user:ZHANGSAN&pretty'
3.查询多个索引的信息
curl -XGET 'localhost:9200/test,pms/_search?q=user:ZHANGSAN&pretty'
基本检索
- 设置不同字段的排序权重( Kibana Dev Tools)
GET /pms/_search?pretty
{
"query": {
"multi_match": {
"query": "小米",
"fields": ["name^2","subTitle"]
}
}
}
在name和subTitle两个字段里查询,name的权重是2,subTitle的权重是1。
- 返回指定的字段子集:
//通过 _source参数指定返回的检索字段集
GET /pms/_search?pretty
{
"query": {
"match_all": {}
},
"_source": ["id","name","brandName"]
}
//通过match参数指定字段和检索词,排序后返回指定数量的指定字段的检索集
GET /pms/_search?pretty
{
"query": {
"match":{
"name": "小米"
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
],
"_source": ["id","name","price"],
"size": 3
}
//match_phrase子句及其应用
GET /pms/_search?pretty
{
"query": {
"match_phrase":{
"name": "小米"
}
}
}
- Term查询、Terms查询、Wildcard通配符查询
// 含有boost的term查询, term查询表示查询中的此项不再被解析,boost可以提升其重要性
GET /pms/_search?pretty
{
"query": {
"term": {
"name": { //name为字段名
"value": "小米","boost": 2
}
}
}
}
// terms的用法
GET /pms/_search?pretty
{
"query": {
"terms": {
"name":[ //name为字段名
"小米",
"华为"
]
}
}
}
// wildcard通配符查询允许在要查询的内容中使用通配符*和?(*标书任意多个任意字符,?表示一个任意字符)
GET /pms/_search?pretty
{
"query": {
"wildcard": {
"name": {
"value": "?*"
}
}
}
}
- Match、Match_all、Match_phrase查询
//match_all 查询全部 相当于 select * from table
GET /pms/_search?pretty
{
"query": {
"match_all": {}
}
}
// 匹配所有文档并返回 top11-top12,相当于 select * from table limit 10,5
GET /pms/_search?pretty
{
"query": {
"match_all": {}
},
"from": 10,
"size": 5
}
//匹配所有文档并检索结果按指定字段排序,并分页,
// 相当于 select * from table order by price desc limit 10,5
GET /pms/_search?pretty
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
],
"from": 10,
"size": 5
}
// match_phrase查询
GET /pms/_search?pretty
{
"query": {
"match_phrase": {
"name": {
"query": "小米8 and 全面屏",
"slop": 2 // 定义了在查询文本的词项间的间隔词数量
}
}
},
"_source": ["id","name","price"]
}
- Query_string查询
// query_string 查询
GET /pms/_search?pretty
{
"query": {
"query_string": {
"query": "keywords:小米^2 +keywords:华为 -brandName:万和",//注意这里的+号和-号前的空格不能省略
"default_field": "keywords" //查询所作用的默认字段,默认为_all
}
},
"_source": ["id","name","price","keywords"]
}
- Prefix、Range查询
// prefix查询,能够找到摸个字段以给定前缀开头的文档。
GET /pms/_search?pretty
{
"query": {
"prefix": {
"keywords": {
"value": "女式"
}
}
},
"_source": ["id","name","price","brandName","keywords"]
}
// range查询
GET /pms/_search?pretty
{
"query": {
"range": {
"id": {
"gte": 10,//大于等于
"lte": 20 //小于等于
}
}
},
"_source": ["id","name","price","brandName","keywords"]
}
- More_like_this、Fuzzy查询
// more_like_this查询得到与所提供的文本相似的文档。这里可以使用的部分参数如下:
// 1.fields 查询所作用的字段的数组,默认是 _all。
// 2.like 指明文档应比较的内容。
// 3.percent_terms_to_match 指明一个文档必须匹配多大比例此项才视为相似,默认30%。
// 4.min_term_freq 文档中词项出现的最低频次,低于该值的词项将被忽略,默认 2。
// 5.max_query_terms 文档中词项出现的最高频次,以避免词项被忽视,默认是 无界。
// 6.min_word_len 指明单个单词的最小长度,低于该值的单词将被忽略,默认是0。
// 7.max_query_terms 指明在生成的查询中查询词项的最大数目,默认 25。
// 8.max_word_len 指明单个单词的最大长度,高于该值的单词将被忽视,默认无界。
// 9.stop_word 指明忽略词集。
// 10.boost 提升一个查询的权重时使用的权重,默认是1。
// 11.analyzer 指明用于分析内容的分词器。
GET /pms/_search?pretty
{
"query": {
"more_like_this": {
"fields": [
"name"
],
"like": "女式",
"min_term_freq": 1,
"max_query_terms": 12,
"boost": 2,
"analyzer": "ik_smart"
}
},
"_source": ["id","name","price","brandName","keywords"]
}
// fuzzy 查询得到与给定内容相似的所有文档,其查询是基于模糊串并选择其产生的最好的区分词项。
GET /pms/_search?pretty
{
"query": {
"fuzzy": {
"name": {
"value": "小米",
"fuzziness": 0.5
}
},
"_source": ["id","name","price","brandName","keywords"]
}
- 跨字段检索
GET /pms/_search?pretty
{
"query": {
"multi_match": {
"query": "小米",
"fields": ["name","subTitle"] // 同时在name ,subTitle两个字段搜索
},
"_source": ["id","name","price","brandName","keywords"]
}
Filter、复合查询、结果排序
Elasticsearch在执行带有filter的查询时,会打开索引的每个segment段文件,然后去判断里面的文档是否符合该filter要求,并且这个匹配的结果用一个很大的只有两个状态的的数字BitSet来存储,如果一个文档和filter查询匹配,那么其对应的bit位就设置为1,否则设置为0。下次如果面对同样的filter查询,直接使用内存里面的BitSet来进行判断即可,而不需要再打开索引文件的segment文件了,这样就可以大大提高了查询出来的速度。
可见,其主要作用有两点:首先,他能够过来满足条件的部分结果;其次,filter子句可很好地讲数据缓存进内存中,这样可大大加快下一次的检索速度(需要添加_cache参数),因此,建议在可能的情况下尽量使用filter代替一般的查询一边进一步提高效率。
// newStatus==1 && recommandStatus==1 并 按price 范围过滤
// 复合查询选项: must 、 must_not 、 should,可将各个子查询链接起来
// sort 排序
GET /pms/_search?pretty
{
"query": {
"bool": {
"must": [
{
"term": {
"newStatus": {
"value": "1"
}
}
},
{
"term": {
"recommandStatus": {
"value": "1"
}
}
}
],
"must_not": [
{
"match": {
"name": "华为"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 1000,
"lte": 3000
}
}
}
]
}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)