天津市武清区建设银行网站,杭州市建设工程交易网,网站设计谈判,莆田网站建设模板Elasticsearch(二)kibana数据检索
1.简述
有了数据学习使用kibana调用api检索数据#xff0c;熟练kibana操作后再进一步使用spring data。
term用于keyword类型数据精准查询#xff0c;类似mysqlmatch 用于text类型数据分词查询#xff0c;倒排索引
首先针对keyword文本…Elasticsearch(二)kibana数据检索
1.简述
有了数据学习使用kibana调用api检索数据熟练kibana操作后再进一步使用spring data。
term用于keyword类型数据精准查询类似mysqlmatch 用于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 thangte大于等于greater than or equallt:小于less thanlte小于等于less than or equaleq等于equalneq不等于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。
解决方案 在业务中限制分页大小使fromsize10000; 动态更改索引设置为max_result_window参数赋值足够大的值 es默认最大返回数是10000支持的最大返回数是2^31-1也就是2147483647不建议设置太大query数据时size不要太大总得考虑内存消耗的设置了返回max后可以用分页获取 from:num_a, size:num_b获取的就是num_a1到num_anum_b的数据
但是很多时候10000数据不能满足项目的需求所以我们就要解除这个限制。
解决方案 第一种办法
在restful请求时,解除索引最大查询数的限制
put _all/_settings{index.max_result_window:200000}_all表示所有索引如果针对单个索引的话修改成索引名称即可
8.仅返回需要的字段
当文档对象太多影响数据查看效果可以使用_source保障只返回我们想要的数据 _source: [showed_field1,showed_field12],---------------------------------------GET zb_notice/_search{_source: [amount,scale],query:{match_all: {}},size: 10000}