ElasticSearch学习(五)ElasticSearch基本操作:精确查询
admin
2024-03-26 04:32:05
0

六、ElasticSearch基本操作:精确查询

ES最关键的地方就在于查询

一.Query String

1、查询所有数据

GET 索引名称/_search

2、带参查询

GET 索引名称/_search/q=键:值
#例,只会去date里查询符合2022-06-01的
GET product/_search?q=date:2022-06-01

3、分页查询

#查询XX索引,从位置0开始,查询十条,以price排desc的序。
GET  索引名称/_search?from=0&size=10&sort=:price:desc

5、全文检索(在所有有索引的字段上进行检索)

#相当于在所有有索引的字段查询2022-06-01
GET product/_search?q=2022-06-01

6、数据结构查询

GET 索引名称/_mapping

二.DSL

关于查询,理解match和term的区别是非常重要的。
match和term最大的差别在于,查询条件是否分词。
举例说明
“xiaomi phone”,如果使用match查询是会分成两个词:xiaomi+phone,如果使用的是term则查询条件不分词:xiaomi phone。

1、全文检索match(match和term为参数条件)

1.match

match查询的是key对应的value,这里的key和value都会分词。

GET test/_search 
{"query": {"match": {"key": "value"}}
}

2.match_all

查询全部

GET test/_search 
{"query": {"match_all": {}}
}

3.multi_match

多字段查询,查询name或type中包含phone的数据

GET test/_search 
{"query": {"multi_match": {"query": "phone","fields": ["name","type"]}}
}

4.match_phrase

这个是最复杂的match查询,比较像term但是又和term不一样,以ni shi zhu为查询条件举例,ni shi zhu会被分词为"ni",“shi”,“zhu”,但是分词具有顺序,对应的value中必须包含这三个分词+顺序没有被打乱+中间没有插入任何词

GET test/_search 
{"query": {"match_phrase": {"word": "ni shi zhu"}}
}

2、精确查询term(查询条件不分词)(match和term为参数条件)

1.term

这里的查询条件不会分词,会按"ni shi zhu"直接在word里进行查询。

GET test/_search 
{"query": {"term": {"word": "ni shi zhu"}}
}

2.term与keyword

#数据类型如下
"text": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}
}

对于text类型的字段,如果是"ni shi zhu",则会被分解为"ni",“shi”,"zhu"进行保存,只有在keyword字段才会查询到全称(keyword默认之为256,小于256字段长度取所有值,大于256则只截取前256个字符。)

GET test/_search 
{"query": {"term": {"text.keyword": "xiaomi nfc phone"}}
}

3.terms

#查询字段为FIELD,值为VALUE1和VALUE2的数据。
GET test/_search
{"query": {"terms": {"FIELD": ["VALUE1","VALUE2"]}}
}

3、范围查询range

#查询字段为FIELD,大于等于10并小于等于20的所有数据。
#gt=大于 gte=大于等于
#lt=小于 lte=小于等于
GET test/_search 
{"query": {"range": {"FIELD": {"gte": 10,"lte": 20}}}
}

4、filter和query的区别

1.查询对比

filter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响。
query,会计算每个document相对于搜索条件的相关度,并按照相关度进行排序。
一般来说,如果你是在进行搜索,需要将最匹配搜索条件的数据先返回,那么用query;如果你只是要根据一些条件筛选出一部分数据,不关注排序,那么使用filter。

2.性能对比

filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的机制,自动cache最常使用filter的数据。
query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果。

5、组合查询bool

bool可以组合多个查询条件,bool查询是采用more_matches_is_better的机制,因此满足Must和should子句的文档会合并起来计算分值。

1.must:必须满足

must中可以使用term或者match,这里主要列举写法,而且写法基本上一样,只是修改了不同的条件。

GET test/_search 
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}}]}}
}GET test/_search 
{"query": {"bool": {"must": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

2.should:或

GET test/_search 
{"query": {"bool": {"should": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

3.must_not:必须不,不计分

GET test/_search 
{"query": {"bool": {"must_not": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

4.filter

GET test/_search 
{"query": {"bool": {"filter": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

5.minimum_should_match

GET test/_search 
{"query": {"bool": {"minimum_should_match": [{"term": {"FIELD": {"value": "VALUE"}}},{"match_phrase": {"FIELD": "PHRASE"}}]}}
}

相关内容

热门资讯

河南夫妇冒雨移开折断大树,“不... 评论员 陈柯旭 折断的大树能挡住马路,但挡不住普通人身上的微光。 近日,在河南驻马店突降暴雨,一棵大...
现货黄金跌破4300美元关口 8日,现货黄金盘中跳水,跌破4300美元/盎司,跌超0.6%。 消息面上,据新华社,当地时间7日晚,...
英法德联合出手! 文丨陆弃 当英国首相斯塔默、法国总统马克龙和德国总理默茨准备与乌克兰总统泽连斯基在伦敦举行会晤时,外...
两个月来伊以首次互袭,特朗普想... 当地时间6月7日,伊朗向以色列发射了四轮导弹袭击,以回应数小时前以色列对黎巴嫩首都贝鲁特进行的致命空...
德韩竞标谁能赢? 崔轶亮:难分... 加拿大正在推进“巡逻潜艇项目”,计划采购最多12艘柴电潜艇,以替换预计于2030年代中期退役的4艘“...
向以色列发射三波导弹后,伊朗威... 据参考消息6月8日报道,6月7日晚,伊朗向以色列发射三波导弹,以回应以色列不断升级对黎巴嫩的军事行动...
原创 恐... 6月8日,国际足坛再次出现球员在比赛中昏迷的情况。在丹麦同乌克兰的热身赛中,34岁的埃里克森忽然晕倒...
原创 歼... 这两天,咱们国产隐身机歼-35的外贸版(也就是歼-35AE)算是彻底曝光了,连带着那架编号0001的...
以色列遭多波导弹袭击!特朗普:... 据美国有线电视新闻网(CNN)报道,当地时间7日,伊朗伊斯兰革命卫队(IRGC)发布声明称,当日用弹...
原创 W... WB集团的Warmate“滞留弹药,配备气动弹射器,起飞前使用。(WB集团) 波兰军备局与WB集团签...