【Elastic Engineering】创作 Kibana: 如何使用 Search Bar

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 我们知道 Kibana 作为 Elasticsearch 的数据呈现及分析,在 Kibana 中,search 几乎遍布所有的页面。搜索对于 Elastic 至关重要。了解如何在 Kibana 中进行搜索时非常重要的。它不仅仅限于我们对于输入字的搜索,或者对于一些词的过滤。


我们知道 Kibana 作为 Elasticsearch 的数据呈现及分析,在 Kibana 中,search 几乎遍布所有的页面。搜索对于 Elastic 至关重要。了解如何在 Kibana 中进行搜索时非常重要的。它不仅仅限于我们对于输入字的搜索,或者对于一些词的过滤。它还包括:



  • 通过构建正则表达式或者通配符进行搜索


  • 对某些字段进行加权搜索


Search Bar 在许多的 Kibana 应用中都有被用到:



你也可以在其他的一些应用中可以看到:


image.png    

如何使用 Kibana 中的 Search Bar

Kibana 的搜索方式


在 Kibana 的搜索中,有一下三种方式进行搜索:


  • KQL (Kibana Query Language)


  • Lucene


当我们关掉 KQL 开关后,就变成如下的设置了:



  • DSL: 这种方式适用于使用 Kibana 中的 Dev Tools。在我之前的很多教程中都已经使用过。这里就不一一讲述。您可以参考我之前的文章 “开始使用Elasticsearch (2)” 进行详细地阅读。


下面,我们来分别描述如何使用这些来做我们的搜索。


什么是 index pattern?


Index pattern:它指向一个或多个 Elasticsearch 的索引,并告诉 Kibana 想对哪些索引进行操作。



从上面我们可以看出来,所有是的索引存在于 Elasticsearch 之中,我们需要 Index pattern 让 Kibana 来对这个索引进行操作。


数据类型


对于 Elasticsearch 来说,有两类数据可以进行分析:


  • Time series (时间系列):这类数据的每个事件都是和时间的某一个时刻相关的。一般来说增长很快。通常会有一个和时间相关的字段。


{
    "tweet": "Wow Elasticsearch 7.0 seems awesome!",
     "hashtags": ["elasticsearch", "kibana"]
    "timestamp": September 1st 2017, 07:15:40.035
}


  • Static data (静态数据):这类数据通常增长很慢,通常没有相应的时间标志。


{
   "cuisine": "French",
   "ingredients": "Cheese, flour, butter, eggs, milk, nutmeg",
   "time_in_min": 50,
   "level": "easy"
}


当我们创建自己的 Index pattern 时,我们需要对我们的数据类型进行选择:



在上面我们需要根据自己的索引的名称输入相应的 index pattern。它可以是指向某单个的索引,也可以通过通配符指向多个索引。如果你的 index 里含有有时间相关的字段,Kibana 会自动弹出选项让我们选择是否需要 Time Filter:



如果我们选择 Time Filter 的字段,那么将会按照时间系列(Time series)的方法来处理。否则,我们可以选择不使用  Time Filter,那么我们只能对该 index 进行搜索,而不能对它进行和时间系列相关的操作。针对这种情况,我们下面介绍的 Time  picker 将不再适用。


如果我们想删除一个 Index pattern,我们也可以在上面的页面中选择删除即可:



我们可以点击右上角的星图标使得这个索引是我们的默认 Index。在上面的图中,我们也可以看到有的field是可以 Search 的,有的是可以做 aggregation 的。如果大家想对这个有更多的了解,请详细阅读我之前的文章 “Elasticsearch:inverted index,doc_values 及 source”。


准备数据


我们可以利用 Kibana 自带的数据来做演示。我们按照如下的方式来加载数据:



选择 “Add sample data”:



我们选择 “Add data”,这样我们就把我们需要的样本数据加载到 Elasticsearch 了。


在进行搜索之前,我们必须明白两个重要的东西:


  • 选中需要操作的 Index pattern


  • Time picker:对于 time series (时序)数据来说,这个非常重要。如果没有选好对应的时间,可能在 Kibana 中没有任何的数据。



Kibana 搜索


我们首先来查看一下我们的 kibana_sample_data_flights 索引的一个文档内容。


        "_source" : {
          "FlightNum" : "9HY9SWR",
          "DestCountry" : "AU",
          "OriginWeather" : "Sunny",
          "OriginCityName" : "Frankfurt am Main",
          "AvgTicketPrice" : 841.2656419677076,
          "DistanceMiles" : 10247.856675613455,
          "FlightDelay" : false,
          "DestWeather" : "Rain",
          "Dest" : "Sydney Kingsford Smith International Airport",
          "FlightDelayType" : "No Delay",
          "OriginCountry" : "DE",
          "dayOfWeek" : 0,
          "DistanceKilometers" : 16492.32665375846,
          "timestamp" : "2019-11-18T00:00:00",
          "DestLocation" : {
            "lat" : "-33.94609833",
            "lon" : "151.177002"
          },
          "DestAirportID" : "SYD",
          "Carrier" : "Kibana Airlines",
          "Cancelled" : false,
          "FlightTimeMin" : 1030.7704158599038,
          "Origin" : "Frankfurt am Main Airport",
          "OriginLocation" : {
            "lat" : "50.033333",
            "lon" : "8.570556"
          },
          "DestRegion" : "SE-BD",
          "OriginAirportID" : "FRA",
          "OriginRegion" : "DE-HE",
          "DestCityName" : "Sydney",
          "FlightTimeHour" : 17.179506930998397,
          "FlightDelayMin" : 0
        }


就像我上面提到的那样,我们首先选定我们的 index,然后在设定我们的 time picker 所对应的时间。



KQL 方式来进行搜索:



在上面我们可以看到,当我们使用 KQL 时,一个很大的好处是它可以帮我们自动提示我们想要搜索的字段,具有自动补全的功能。比如我们打入 day 时,Kibana 会自动弹出选项让我们进行选择。


我们甚至直接可以像百度那样,打入我们想要的字符串,而不用特定一个字段:



如果我们输入:


customer_full_name: Abigail Stewart


 

它表明 customer_full_name 包含 Abigail Stewart 其中的任何一个。如果我们想进行

exact phrase 匹配,我们可以这么写:


customer_full_name: ”Abigail Stewart“



我们也可以通过通配符来进行模糊查找:



搜索词周围的引号将启动词组(phrase)搜索。 例如,消息:“Quick brown fox” 将在消息字段中搜索短语 “quick  brown fox”。 没有引号,您的查询将通过消息字段配置的分析器分解为 token,并且将匹配包含这些 token  的文档,而不考虑其出现的顺序。 这意味着带有 “quick brown fox” 的文档将匹配,但是 “quick fox brown”  也将匹配。 如果要搜索短语 (phrase),请记住使用引号。搜索 phrase 时,每个 token 的顺序是非常重要的。


查询解析器将不再在空白处拆分。 多个搜索词必须由显式布尔运算符分隔。 Lucene 会将搜索字词与或默认组合,这些布尔操作符为 or, and 及 not。



上面的搜索将会返回 dayofWeek 为1或者 OriginCountry 为 "DE" 的所有文档。如果我们想搜索同时满足这个两个条件的文档,我们可以使用 and



显然这个时候我们看到的文档数只有23个,比之前的少很多。我们也可以使用 not 来返回非操作,比如我们想得到所有 OriginCountry 不为 DE 的文档,我们可以直接搜索 not OriginCountry: "DE"



我们也可以对字段进行范围来搜索,比如:



关于 KQL 的更多说明,可以参考另外一篇文章 “Kibana:Kibana Query Language - KQL”。


Lucene 方式进行搜索:


为了能够进行 Lucene 方式进行搜索,我们必须切换到 Lucence 方式。在这种方式下,当我们在输入框里输入字段时没有提示,不能帮我们自动完成输入。它使用 Elasticsearch 的 query string 语法来进行搜索。你可以阅读 “Elasticsearch: query_string 查询” 来了解更多。



我们可以搜索一个范围的文档:



在上面,如果我们不想包括 3 的话,我们应该写为:dayOfWeek:[0 TO 3}。你也可以写从 3 向上的任何值:



我们也可以按照如下的方法搜索 OriginCountry 是 US 或者是 DE 的所有文档。在下面的语法中,我们一定要注意到 OR,这是一个大写的字母组合。同样当我们想要同时满足两个条件时,我们必须使用 AND,而不是小写的 and。这个和在 KQL 下的情况是不同。如果在 Luncene 搜索模式下,我们输入 and,则表示我们想查询的单词是 and,而不是表示 AND



我们也可以对某个字段进行加权,比如我们可以突出 OriginCountry 为 DE 的国家。在如下的搜寻中,我们给 OriginCountry 为 DE 的文档 3 倍的分数,这样使得这些文档尽量在排名的前面。



或者模糊查询:



或者只有一个 edit 错误的模糊查询 (请注意这里的 edit 的概念,在模糊查询文章里查看):



你也可以使用通配符 来匹配任何一个字母(请注意这个在 KQL 中是没有的):



我们也可以使用正则表达式来进行搜索。假如我们不知道我们的 OriginCountry 是 US 还是什么,我们知道后面的一个字母时 S,那么我们可以使用如下的方法来查询:



同样我们可以使用  .? 正则来查询有0个或1个字母:



你也可以通过 .* 正则来匹配0个或多个字母的搜索:



相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
搜索推荐 Java 数据处理
Elasticsearch搜索分析引擎本地部署与远程访问
Elasticsearch搜索分析引擎本地部署与远程访问
|
Linux
linux系统中利用QT实现串口通信的方法
linux系统中利用QT实现串口通信的方法
570 0
|
存储 Kubernetes API
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
kubernetes【存储】1. 共享存储pv、pvc、StorageClass使用详解(1)
|
10月前
|
安全 Android开发 数据安全/隐私保护
《鸿蒙Next原生应用的独特用户体验之旅》
鸿蒙Next在界面设计、操作逻辑、动效体验等方面与iOS类似,强调简洁一致性,悬浮效果提升空间感。其操作便捷,动效流畅,性能优化使流畅度提升30%,媲美iOS。智能交互方面,鸿蒙Next的小艺助手和跨设备互联功能表现出色,支持识屏对话等深度交互。安全隐私保护机制细致,应用体积小,节省流量和存储空间。相比安卓和iOS,鸿蒙Next在用户体验上展现出独特优势,为用户带来更优质、便捷和安全的使用感受。
649 9
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
720 2
|
9月前
|
Linux 开发者 异构计算
英特尔显卡+魔搭社区,一行命令快速部署本地大模型
近期,Intel和魔搭合作,在魔搭社区上线了Ollama 英特尔优化版镜像,该镜像提供基于 IPEX-LLM 的 Ollama 英特尔优化版,开发者可在英特尔GPU (如搭载集成显卡的个人电脑,Arc 独立显卡等) 上直接免安装运行 Ollama。
679 3
|
10月前
|
监控 前端开发 应用服务中间件
小游戏源码开发搭建技术栈和服务器配置流程
近些年不同场景游戏层出不穷,现就小游戏开发技术应用及功能详细剖析!
|
弹性计算 Dubbo Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中配置完fc,出现‘Function instance exited unexpectedly(code 1, message:operation not permitted) with start command 'npm run start '. 报错如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
408 5
|
12月前
|
存储 人工智能 安全
阿里云服务器通用型g7、g8a、g8y、g8i实例区别及选择指南
目前在阿里云的活动中,属于通用型实例规格的云服务器有通用型g7、通用型g8a、通用型g8y和通用型g8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:4,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍通用型g7、g8a、g8y、g8i实例的性能、适用场景的区别以及选择参考。
|
Linux
Red Hat下载ISO镜像的方法
Red Hat 是一家全球领先的开源技术解决方案提供商,总部位于美国北卡罗来纳州罗利。该公司成立于1993年,其主要产品是 Red Hat Enterprise Linux (RHEL) 操作系统。Red Hat 还提供其他产品和解决方案,如 OpenShift、Virtualization、Ansible 等,用于企业级应用的开发、部署和管理。Red Hat 的产品和服务广泛应用于各个行业的企业,其开源背景和社区合作模式使其成为许多企业的首选技术合作伙伴。
2538 1
下一篇
开通oss服务