这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战
之前有又一篇文章介绍过elasticsearch,当时之所以使用elasticsearch是因为想做一个词云分析相关的操作。正正好elasticsearch支持词云分析的功能,所以做了相关的一些操作。空闲时期又来学习了一下elasticsearch的查询功能文档传送门
查询
elasticsearch 查询分为querydsl,aggregation,urlquery。接下来一个一个细细的说明一下 本文主要介绍 queryDSL查询
queryDSL
首先包含的搜索的参数有:
_source: 可选字段返回想要的字段
script_fileds: 对一些字段进行加工处理
from:从第几个开始
size:数据量
sort:排序
query:查询条件
这里面说说query分为term, match,bool组合查询。 terms, range, exists等等。这里只说比较常用的。
{
"_source": ["message"],
"script_fields": {
"qt": {
"script": {
// 一种脚本语言
"lang": "painless",
"source": "doc['querytime'].value + 1"}
},
// 范围
"from": 0,
"size": 10,
// 排序
"sort": [{ "querytime": "desc" }]
}
Trem查询,不做分词处理,可用keyword精确匹配
{
// 条件
"query": {
"term": {
// 对输入内容不会进行任何分词处理,而数据本身的默认分词为[slow][query]
"message": {
"value": "slow"
}
}
},
}
可以通过 keyword 进行严格匹配查询
{
"query": {
"term": {
"message.keyword": { "value": "Slow query" }
}
}
}
Match- 全文查询,会对查询条件进行分词
{
"query": {
"match": {
"message": {
"query": "Slow query",
"query": "query Slow",
"operator": "AND"
}
}
}
}
range, exists, terms查询
{
"query": {
"range": {
"day": {
"gt": "2022-01-25",
"le": "2022-01-25",
}
}
}
}
{
"exists": { "field": "time" }
}
{
"terms": ['11111', '2222']
}
bool查询
# should 选择匹配
# must 必须匹配
# filter 必须匹配,不贡献算分
# must_not 必须不匹配,不贡献算分
{
"query": {
"bool": {
"must": [],
"filter": {},
"must_not": {},
"should": []
}
}
}