elk笔记13--queries-term-levelqueries

昕光xg 昕光xg     2022-12-02     481

关键词:


elk笔记13--Queries-term-level queries

1 term-level 查询简介

基于结构化数据中准确的值,用户可以使用term级别的查询来搜索文档。常见结构化数据包括日期范围、IP地址、价格、产品IDs等。

与全文检索不同,项级别的查询不分析查找的项,它会匹配存储在某个字段中的具体项。当查询的项为keyword字段时,它将使用 normalizer 属性来正则化搜索的项。

该范畴内的查询包括 exists查询、fuzzy查询、ids查询、prefix查询、range查询、regexp查询、term查询、terms查询、terms_set查询、type查询、wildcard查询 等11类。

2 term-level 查询类型

2.1 exists query

该查询返回包含一个值的文档,且该值不能为null 或 [].

获取包含字段cc的文档
GET test/_search

"query":
"exists":
"field": "cc"



可以通过must_not 获取cc字段不存在的文档
GET test/_search

"query":
"bool":
"must_not": [

"exists":
"field": "cc"


]


2.2 fuzzy query

返回包含和搜索项相似项的文档,该相似性是由 ​​Levenshtein edit distance​​​ 来评估的。
编辑距离指的是从一个项变为另外一个项所需要的单字符改变的数量,这些改变可以包括:
改变一个字符(box → fox)
去掉一个字符 (black → lack)
插入一个字符 (sic → sick)
调换2个相连字符的位置 (act → cat)

kibana_sample_data_ecommerce 中有Mary用户,根据上述改变可知:mery,ary,marys,mray都是mary的相似项。
GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"query":
"fuzzy":
"user":
"value": "mery"


,
"size": 1

2.3 ids query

基于文档的id来返回文档,该IDs存放在 _id 字段中。
该方式比较适合查找自定义 _id 字段的文档。

GET test/_search

"query":
"ids":
"values": ["1","3"]


2.4 prefix query

根据字段指定的前缀来查找文档。
prefix 的 顶层参数为field,即指定field;
field 的 顶层参数为value,即为前缀字符或者字符串。

正常情况下prefix 查询效率不高,可以在mapping中添加 index_prefixes 属性来提高搜索速度。如果设置为enabled,则指定的字段会多出2-5个字符的前缀,这让es执行前缀查询更加快,但是占用更多的存储空间。

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"query":
"prefix":
"user":
"value": "ma"


,
"size": 1

2.5 range query

根据指定字段的范围来查找文档。
比较方式又:gt(大于),lt(小于),gte(大于等于),lte(小于等于)

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"size": 0,
"query":
"range":
"taxful_total_price":
"gt": 100,
"lt": 200



2.6 regexp query

根据指定字段,找到符合特定正则表达的文档。
顶层参数 为filed,field子参数包括value,flags,max_determinized_states,rewrite;
其中value为正则内容;
flags表示可以使用的正则表达操作符,默认ALL为全部可用,​​​regexp-optional-operators​​​;
max_determinized_states 表示为自动机状态的么最大数量,默认值为10000;
rewrite 决定来相关度分数计算方式,Lucene 如何将原始query转化为bool query或者bit set;

GET kibana_sample_data_ecommerce/_search

"query":
"regexp":
"user":
"value": "el.*a",
"flags" : "ALL",
"max_determinized_states": 10000,
"rewrite": "constant_score"



2.7 term query

根据某个字段,返回字段值和指定值相同的文档;
顶层参数 为filed,field子参数包括value,boost;
其中,boost值默认为1.0;

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"size": 1,
"query":
"term":
"user":
"value": "mary"




"user": "value": "mary" 也可以调整为 "user": "mary",但是调整后无法使用boost参数;
注意:term不适合对text类型搜索,通常不会搜索到想要的结果,如果使用全文搜索则应该使用match来查找;

2.8 terms query

根据某个字段,只要和指定的某个值相同即可返回文档;
顶层参数 field 和 boost;
field 中为目标值数组,es中限制数组最大值为 65536;

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"size": 1,
"query":
"terms":
"user":[ "mary","abd"]


2.9 terms_set query

根据某个字段,返回文档中必须包括最少数量的特定值;我们可以通过一个字段或者script来定义最小匹配数量。
顶层参数field,子参数为terms(必选项),minimum_should_match_field,minimum_should_match_script。

PUT /job-candidates

"mappings":
"properties":
"name":
"type": "keyword"
,
"programming_languages":
"type": "keyword"
,
"required_matches":
"type": "long"




PUT /job-candidates/_doc/1?refresh

"name": "Jane Smith",
"programming_languages": ["c++", "java"],
"required_matches": 2

PUT /job-candidates/_doc/2?refresh

"name": "Jason Response",
"programming_languages": ["java", "php"],
"required_matches": 2

GET /job-candidates/_search

"query":
"terms_set":
"programming_languages":
"terms": ["c++", "java", "php"],
"minimum_should_match_field": "required_matches"




minimum_should_match_field 对应的值必须为指定的字段,不能为随机定义的数值;
也可以使用script的方式:
GET /job-candidates/_search

"query":
"terms_set":
"programming_languages":
"terms": ["c++", "java", "php"],
"minimum_should_match_script":
"source": "Math.min(params.num_terms, doc[required_matches].value)"
,
"boost": 1.0



2.10 type query

该查询返回指定type类型的文档。
es7.0 之后废弃了type类型,一个index只能有一个type类型,因此这类查询后续意义不太大。

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"query":
"type":
"value": "_doc"


2.11 wildcard query

Returns documents that contain terms matching a wildcard pattern.
根据某个字段,返回包括特定通配符的文档。当前通配符只支持 ? 和 * 2种。
顶层参数field,子参数value,boost,rewrite。

GET kibana_sample_data_ecommerce/_search

"track_total_hits": true,
"query":
"wildcard":
"user":
"value": "mar?*",
"boost": 1.0,
"rewrite": "constant_score"



3 说明

  1. 参考文档
    ​​​term-level-queries​​​ 更多DSL 查询内容见​​elk笔记13–Query DSL​
  2. 测试环境
    本文测试案例对应的 es 版本为7.2.1
    测试数据为kibana自带数据,Home->Add data->Sample data->Sample eCommerce orders


elk安装笔记

1、安装JDKrpm -ivh jdk-8u101-linux-x64.rpm Preparing...                ##################################### 查看详情

elk笔记8--index

elk笔记8--index​​1.index创建的几种方式​​​​1.1直接创建index​​​​1.2按照当前日期创建索引​​​​1.3创建带有rollover功能的索引​​​​2.索引的常见设置​​​​2.1基本设置​​​​2.2index为unassigned的常见处理方式​​... 查看详情

elk笔记10--filebeat使用

elk笔记10--filebeat使用​​1filebeat介绍​​​​2filebeat使用案例​​​​2.1软件安装​​​​2.2采集数据到kafka​​​​2.3采集数据到es​​​​3使用技巧​​​​3.1filebeat将日志按照类别发送到不同kafkatopic​​​​3.2filebeat将日... 查看详情

elk配置笔记

filebeat安装配置1下载,安装wgethttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.4.3-linux-x86_64.tar.gzmvfilebeat-8.4.3-linux-x86_64.tar.gz/optcd/opttar-zxvffilebeat-8.4.3-linux-x86_64.tar.gzcd 查看详情

elk笔记13--queries-fulltextqueries

elk笔记13--Queries-fulltextqueries​​1fulltext查询简介​​​​2fulltext查询类型​​​​2.1intervalsquery​​​​2.2matchquery​​​​2.3match_bool_prefixquery​​​​2.4match_phrasequery​​​​2.5match_phrase_prefixquery​​​​2.6multi_m 查看详情

elk笔记9--跨集群搜索

elk笔记9--跨集群搜索​​1.跨集群搜索简介​​​​2.跨集群搜索配置​​​​3跨集群使用案例​​​​4说明​​1.跨集群搜索简介跨集群允许我们在一个或者多个远程集群上执行搜索任务,通常我们可以用跨集群搜索来过滤或... 查看详情

elk笔记22.2--通过api快速创建索引

elk笔记22.2--通过api快速创建索引​​1简介​​​​2功能实现​​​​2.1源码​​​​2.2测试​​​​3注意事项​​​​说明​​1简介本文基于​​elk笔记22–通过api快速创建索引​​继续通过api快速创建索引。本节将追加一个... 查看详情

elk笔记11--快照的使用

elk笔记11--快照的使用​​1快照介绍​​​​2快照使用​​​​2.1nfs作为存储仓库​​​​2.2hdfs作为存储仓库​​​​3使用技巧​​​​4说明​​1快照介绍快照是运行中es集群的一个备份,进行快照时候既可以全集群所有索引... 查看详情

elk学习笔记a

一、基本操作1、命令行运行 bin/logstash-e ‘input{stdin{}}output{stdout{codec=>rubydebug}}‘#bin/logstash -e ‘input{stdin{}}output{stdout{codec=>rubydebug}}‘Logstash startup compl 查看详情

elk学习笔记b

一、输入a、标准输入:input {    stdin {        add_field => {"key" =>"value"}        查看详情

elk笔记13--queries-term-levelqueries

elk笔记13--Queries-term-levelqueries​​1term-level查询简介​​​​2term-level查询类型​​​​2.1existsquery​​​​2.2fuzzyquery​​​​2.3idsquery​​​​2.4prefixquery​​​​2.5rangequery​​​​2.6regexpquery​​​​2.7termquery​​​​2.8term 查看详情

elk学习笔记之kibana入门使用

Kibana入门使用: 第一次导入索引:修改展示时间,不然查不到数据:点Discover,查阅数据:如果要添加新的index:点击Visualize,创建chart:点击Dashboard,布局:DashBoard完工啦!!!嘿嘿嘿  查看详情

elk笔记4--grok正则解析

elk笔记4--grok正则解析​​1grok切分方法​​​​2grok切分案例​​​​3说明​​1grok切分方法grok切分规则可按照如下思路进行。1)找准切分标志,以切分标志作为中心向左或者向右逐个字段抽出,对于正则中的通配符需要进行... 查看详情

elk-5.0.1_生产实践杂乱笔记

[[email protected]~]#cat/etc/redhat-release (经实践,elk5.0.1需要内核3.点几以上版本支持)CentOSLinuxrelease7.2.1511(Core)IP:本地192.168.1.73[[email protected]~]#cat/etc/hosts127.0.0.1 localhostlocalh 查看详情

elk学习笔记之elasticsearchbulk操作:

Bulk操作: Bulk操作用于批量插入数据:请求体格式:编辑一个文件:(插入2个新的文档)curl-XPOST‘http://192.168.1.151:9200/library/books/_bulk‘--data-binary@requests用mget查询文档:已经成功插入。 查看详情

elk学习笔记之elasticsearchmget操作

Mget操作: 查询多个文档:curl-XGET‘http://192.168.1.151:9200/_mget‘-d‘{"docs":[{"_index":"library","_type":"books","_id":"1"},{"_index":"library","_type":"books","_id":"2"}]}‘curl-XGET‘http://192.168.1.151 查看详情

elk学习笔记之logstash基本语法

Logstash基本语法: 处理输入的input处理过滤的filter处理输出的output 区域数据类型条件判断字段引用 区域:Logstash中,是用{}来定义区域区域内,可以定义插件一个区域内可以定义多个插件 数据类型:条件判断:字... 查看详情

elk笔记13--queries-geoqueries

elk笔记13--Queries-geoqueries​​1geo查询简介​​​​2geo查询案例​​​​3说明​​1geo查询简介geoqueries(地理位置查询)支持2类geo数据,分别为geo_point和geo_shape2中类型;其中,gep_points支持lat/lon对,geo_shape支持点、线、圆、多边形和... 查看详情