Elasticsearch(二)kibana数据检索
1.简述
有了数据学习使用kibana调用api检索数据,熟练kibana操作后再进一步使用spring data。
-
term
用于keyword类型数据精准查询,类似mysql -
match
用于text类型数据分词查询,倒排索引
首先针对keyword文本类型查询学习,类似于Mysql对字段的查询。
文档内容格式参考
{
"_index" : "zb_notice",
"_type" : "_doc",
"_id" : "4451224572914342308301065",
"_score" : 1.0,
"_source" : {
"_class" : "NoticeEntity",
"id" : "111",
"url" : "https://xxxxxx/purchaseNotice/view/111?",
"owner" : "河管养所",
"procurementName" : "工程建筑",
"procurementNameText" : "应急抢险配套工程建筑",
"intermediaryServiceMatters" : "无(属于非行政管理的中介服务项目采购)",
"investmentApprovalProject" : "是",
"code" : "789456",
"scale" : 3.167183E8,
"scaleText" : "投资额(¥316,718,300.00元)",
"area" : "",
"requiredServices" : "工程建筑",
"typeCodes" : [
"021"
],
"context" : "是一座具有灌溉 、供水 、排洪 、交通和挡潮蓄淡等多功能的大(2)型水闸工程,承担黄冈河下游 8.65 万亩农田的灌溉任务并",
"timeLimit" : "具体时限以合同条款约定为准。",
"amount" : 0.0,
"amountText" : "暂不做评估与测算",
"amountDescription" : "",
"selectIntermediaryType" : "直接选取",
"isChooseIntermediary" : "否",
"isAvoidance" : "否",
"endTime" : "2023-09-04 09:30:00",
"startTime" : "2023-08-31",
"files" : [
{
"fileName" : "东溪水闸初设批复(1).pdf",
"url" : "/aa/bb/file/downloadfile/PjAttachment/123456"
}
]
}
}
2.基础概念
-
结构化搜索是指对结构化的数据进行搜索。比如日期、时间和数字都是结构化的,它们有精确的格式,我们可以对这些格式进行逻辑操作。比较常见的操作包括比较数字或时间的范围、判定两个值的大小、前缀匹配等。
-
打分在结构化查询中会影响数据排序,我们得到的结果只有“是”或“否”两个值,可以根据场景需要,决定结构化搜索是否需要打分,但通常我们是不需要打分的。
term-条件查询,Elasticsearch 中的结构化搜索,即面向数值、日期、时间、布尔等类型数据的搜索,这些数据类型格式精确,通常使用基于词项的term精确匹配或者prefix前缀匹配。
1.term查询
- term查询是完全匹配
- term查询不会再进行分词,而是直接去分词库进行完全匹配查询;
2.terms 特点
- 查询某个字段里含有多个关键词的文档
- 相对于term来,terms是在针对一个字段包含多个值的时候使用
- 通俗来说就是term查询一次可以匹配一个条件,terms一个可以匹配多个条件;
3.数据类型查询
1.字符串检索
需要注意的是term查询的字段必须带上keyword,不然查询为空!
GET zb_notice/_search
{
"query": {
"term": {
"procurementName.keyword": "城南实验中学校园消防管道修缮工程项目工程监理"
}
}
}
“procurementName.keyword”中的“keyword”不是关键字,而是Elasticsearch在插入文档的时候,自动为“procurementName”生成的子字段,名字是“keyword”。
2.数字/金额
现在我们想要做的是查找具有某个价格的所有产品,假设我们要获取价格是20元的商品,我们可以使用 term 查询,如下
GET zb_notice/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"amount": 107000.4
}
}
}
}
}
通常查找一个精确值的时候,我们不希望对查询进行评分计算。只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以1.0作为统一评分。
最终组合的结果是一个 constant_score 查询,它包含一个 term 查询:
GET products/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"price": 20
}
}
}
}
}
对于数字,一般还有范围查询
GET zb_notice/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"amount": {
"gte": 100000,
"lte": 220000
}
}
}
}
}
}
range 支持的选项
gt:大于(greater than)
gte:大于等于(greater than or equal)
lt::小于(less than)
lte:小于等于(less than or equal)
eq:等于(equal)
neq:不等于
4.时间类型
比较通用的是时间范围查询
- 范围时间查询
POST zb_notice/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"startTime": {
"gte": "2023-08-25",
"lte": "2023-08-30"
}
}
}
}
}
}
- 时间查询
POST zb_notice/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"startTime": {
"gte": "2023-08-25"
}
}
}
}
}
}
5.列表类型
当数据结构是一个列表
//多值查询
GET zb_notice/_search
{
"query": {
"terms": {
"typeCodes": ["021", "022", "023"]
}
}
}
6.页数量设置
当测试查询数据时,发现数据可能有100条,但是ES默认返回只有10条,可以设置size查看更多数据
GET zb_notice/_search
{
"query": {
"terms": {
"typeCodes": ["021", "022", "005"]
}
},
"size": 10000
}
7.其他方面-最大返回数限制
es默认查询1W条数据,也就是说超过
Elasticsearch官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错:
Result window is too large, from + size must be less than or equal to
原因分析:
es对from + size的大小进行限制,必须小于等于10000。
解决方案:
在业务中限制分页大小,使from+size<=10000;
动态更改索引设置,为max_result_window参数赋值足够大的值;
es默认最大返回数是10000,支持的最大返回数是2^31-1,也就是2147483647,不建议设置太大,query数据时size不要太大,总得考虑内存消耗的,设置了返回max后可以用分页获取, from:num_a, size:num_b,获取的就是num_a+1到num_a+num_b的数据
但是很多时候10000数据不能满足项目的需求,所以我们就要解除这个限制。
解决方案:
第一种办法:
在restful请求时,解除索引最大查询数的限制
put _all/_settings
{
"index.max_result_window":200000
}
_all表示所有索引,如果针对单个索引的话修改成索引名称即可!!!文章来源:https://www.toymoban.com/news/detail-774121.html
8.仅返回需要的字段
当文档对象太多,影响数据查看效果,可以使用_source,保障只返回我们想要的数据文章来源地址https://www.toymoban.com/news/detail-774121.html
"_source": [
"showed_field1",
"showed_field12"
],
---------------------------------------
GET zb_notice/_search
{
"_source": [
"amount",
"scale"
],
"query":{
"match_all": {}
},
"size": 10000
}
到了这里,关于Elasticsearch(二)kibana数据检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!