elasticsearch 获取排序序号的方法:1、使用默认相关性排序;2、自定义排序规则。使用默认相关性排序是指,如果没有指定任何自定义排序规则,Elasticsearch会默认按照相关性从高到低对搜索结果进行排序。
一、elasticsearch 排序序号怎么获取
1、使用默认相关性排序
如果没有指定任何自定义排序规则,Elasticsearch会默认按照相关性从高到低对搜索结果进行排序。因此,可以取得每个文档的排名,如下所示:
GET /my_index/_search
{
"query": {
"match": {
"my_field": "my_query"
}
},
"size": 10, // 返回的文档数量
"sort": [
{
"_score": "desc" // 按照相关性从高到低排序
}
]
}
在响应结果中,“hits.hits”数组包含搜索结果,其中每个元素都有一个“_score”字段,表示该文档的相关性分数。
2、自定义排序规则
如果需要按照其他字段(例如日期或价格)进行排序,则可以在查询中指定相应的排序规则。此时,“rank”序号可以通过在响应结果中迭代排名顺序的方式得到。
按照日期字段进行排序:
GET /my_index/_search
{
"query": {
"match": {
"my_field": "my_query"
}
},
"size": 10, // 返回的文档数量
"sort": [
{
"my_date_field": {
"order": "desc" // 按照日期从新到旧排序
}
}
]
}
在响应结果中,“hits.hits”数组包含搜索结果,其中每个元素都有一个“_score”字段和一个“_source”字段。可以通过迭代排序后的“_source”数组来获取每个文档的排名。例如,在响应结果中,名列前茅个文档的排名为1,第二个文档的排名为2,以此类推。
二、elasticsearch应用场景
1、全文搜索
Elasticsearch提供了全文搜索的功能,适用于电商商品搜索、App搜索、企业内部信息搜索、IT系统搜索等。例如当您运营一个提供客户检索商品的在线电子商城的时候,可以使用Elasticsearch来存储整个商品的目录和库存,并且为客户提供检索和自动推荐的功能。
2、日志分析
复杂的业务场景通常会产生繁杂多样的日志,如Apache Log、System Log、MySQL Log等,往往很难从繁杂的日志中获取价值,却要承担其存储的成本。Elasticsearch能够借助Beats、Logstash等快速对接各种常见的数据源,并通过集成的Kibana高效地完成日志的可视化分析,让日志产生价值。
3、运维监控
当您在ECS或者物理机中部署了Docker容器、MySQL或MongoDB等数据库,或者您有复杂的IOT场景等,可使用Elasticsearch结合Beats、Logstash或ElasticFlow将所有日志实时集中并构建索引,然后通过集成的Kibana灵活地运用数据构建可视化运维看板,并在看板上展示主机名称、IP地址、部署情况、显示颜色等信息。
4、安全分析
当您需要通过日志解决公司内部繁杂的安全审计工作,可通过Elasticsearch分析、检索海量历史日志,高效地完成安全审计工作。同时您可以借助Elasticsearch的数据响应性能,快速感知系统中实时发生的事件,及时帮助您规避风险。
三、elasticsearch相关概念
1、集群(cluster)
一个Elasticsearch集群由一个或多个ES节点组成,并提供集群内所有节点的联合索引和搜索能力(所有节点共同存储数据)。一个集群被命名为少数的名字(默认为elasticsearch),集群名称非常重要,因为节点需要通过集群的名称加入集群。请确保在不同的环境使用不同的集群名称,否则会导致节点添加到错误的集群中。
2、节点(node)
一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。和集群类似,节点由一个名称来标识,默认情况下,该名称是在节点启动时分配给节点的随机通用少数标识符(UUID)。您也可以自定义任意节点的名称,节点名称对于管理工作很重要,因为通过节点名称可以确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
一个节点可以被添加到指定名称的集群中。默认情况下,每个节点会被设置加入到名称为elasticsearch的集群中,这意味着,如果在您在网络中启动了某些节点(假设这些节点可以发现彼此),它们会自动形成并加入名称为elasticsearch的集群中。
一个集群可以拥有任意多的节点。此外,如果在您的网络中没有运行任何Elasticsearch节点,此时启动一个节点会创建一个名称为elasticsearch的单节点集群。
3、索引(index)
一个索引是一个拥有一些相似特征的文档的集合(相当于关系型数据库中的一个数据库)。例如,您可以拥有一个客户数据的索引,一个商品目录的索引,以及一个订单数据的索引。一个索引通常使用一个名称(所有字母必须小写)来标识,当针对这个索引的文档执行索引、搜索、更新和删除操作的时候,这个名称被用来指向索引。
4、类型(type)
一个类型通常是一个索引的一个逻辑分类或分区,允许在一个索引下存储不同类型的文档(相当于关系型数据库中的一张表),例如用户类型、博客类型等。目前已经不支持在一个索引下创建多个类型,并且类型概念已经在后续版本中删除,详情请参见es官方文档
5、文档(document)
一个文档是可以被索引的基本信息单元(相当于关系型数据库中的一行数据)。例如,您可以为一个客户创建一个文档,或者为一个商品创建一个文档。文档可以用JSON格式来表示。在一个索引中,您可以存储任意多的文档,且文档必须被索引。
6、映射(mapping)
用来定义一个文档以及其所包含的字段如何被存储和索引,例如在mapping中定义字段的名称和类型,以及所使用的分词器。相当于关系型数据库中的Schema。 分片(shards) 代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
延伸阅读1:elasticsearch
Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。
Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着您的数据和查询量的增长,Elasticsearch 的分布式特性使您的部署能够随之无缝增长。