ElasticSearch学习(一)

ElasticSearch学习(一)

  • ElasticSearch支持2中检索行为。他们都是使用DSL语句来表达检索条件,分别为query(结构化查询)和filter(结构化搜索)

结构化查询

  • 结构化查询支持全文检索,会对检索结果进行相关性计算。使用结构化查询,需要传递query参数:
# your_query为{}表示空查询
{ "query": your_query }

MATCH_ALL查询

  • match_all查询简单的匹配所有文档。在没有指定查询方式时,它是默认的查询:
SELECT * FROM USER;
{ "match_all" : {} }

MATCH查询

  • match查询为全文搜索,类似于SQL的LIKE查询:
SELECT * FROM USER WHERE USER_NAME LIKE '%嘉%';
{ "match":{ "USER_NAME":"嘉" } }
# 结果
"hits":[
    { "_source":{ "USER_ID":"20180124", "USER_NAME":"晓嘉", ... } }
]

MULTI_MATCH查询

  • multi_match查询可以在多个字段上执行相同的match查询:
{
    "multi_match":{
        "query":"景",
        "fields":["USER_NAME", "LOCATION"]
    }
}

RANGE查询

  • range查询能检索出那些段落在指定区间内的文档,类似于SQL的BETWEEN…AND操作

  • range查询允许的操作符有:gt(大于),gte(大于等于),lt(小于),lte(小于等于)

# 查询年龄在18~24岁的用户信息(不包括18)
SELECT * FROM USER WHERE AGE BETWEEN 18 AND 24 AND AGE != 18;
{
    "range":{
        "AGE":{ "gt":18, "lte":24 }
    }
}

TERM查询

  • term查询用于精确匹配,可能是数字、时间、布尔。
# 查询用户ID为20180124的用户信息
SELECT * FROM USER WHERE USER_ID = 20180124;
{
    "term":{ "USER_ID":20180124 }
}

TERMS查询

  • terms查询同term查询,但它允许指定多值匹配,类似于SQL中的IN操作
# 查询用户ID为20180124或20180125的用户信息
SELECT * FROM USER WHERE USER_ID IN (20180124, 20180125);
{
    "terms":{ "USER_ID":[20180124, 20180125] }
}

EXISTS查询 和 MISSING查询

  • exists查询和missing查询被用于查找那些指定字段中有值和无值的文档,类似于SQL中的 IS NOT NULL 和 IS NULL 操作
SELECT * FROM USER WHERE LOCATION IS NOT NULL
{
    "exists":{ "field":"LOCATION" }
}
SELECT * FROM USER WHERE LOCATION IS NULL
{
    "missing":{ "missing":"LOCATION" }
}

BOOL查询

  • 我们时常需要将多个条件的结构进行逻辑与和或操作。等同于SQL中的 AND 和 OR 操作。这时就应该使用bool子句合并多子句结果

  • bool查询共有3中:must(AND),must_not(NOT),should(OR)

# 查询用户地址在北京和用户名中包含“金”字或用户ID为20180124的用户信息
SELECT * FROM USER WHERE LOCATION = "北京" AND (USER_NAME LIKE "%金%" OR USER_ID = 20180124);
{
    "bool":{
        "must":{
            "term":{ "LOCATION":"北京" }
        },
        "should":[
            { "term": { "USER_ID":20180124 } },
            { "match": { "USER_NAME":"金" } }
        ]
    }
}
  • 可以使用filter语句来使其子句不参与评分过程,减少评分可以有效地优化性能。重写上面的例子:
{
    "bool":{
        "should":[ { "match": { "USER_NAME":"金" } } ],
        "filter":{
            "bool":{
                "must":{ "term":{ "LOCATION":"北京" } },
                "should":[
                    { "term": { "USER_ID":20180124 } }
                ]
            }
        }
    }
}

CONSTANT_SCORE查询

  • constant_score查询将一个不变的变量评分应用于所有匹配的文档,他被经常用于你只需要执行一个filter而没有其他查询的情况下。
{
    "constant_score":{
        "filter":{
            "term":{ "USER_ID":20180124 }
        }
    }
}
  • 结构化查询和结构化搜索的区别:
    • 结构化查询会进行相关性计算,因此不会缓存检索结果;而结构化搜索会缓存搜索结果,因此具有较高的检索效率,在不需要全文搜索或者其它任何需要影响相关性得分的查询中建议只是用结构化搜索。当然结构化查询和结构化搜索可以配合使用。

_source子句

  • 某些时候可能不需要返回文档中的所有字段,这时就可以使用_source子句指定返回需要的字段
# 返回用户ID为20180124的用户名和地址
SELECT USER_NAME, LOCATION FROM USER WHERE USER_ID = 20180124
{
    "_source":[ "USER_NAME", "LOCATION" ]
}

sort子句

简单排序
  • 在ElasticSearch中,默认会按照相关性进行排序,相关性得分由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回(未参与相关性评分时参数值为1),默认是按 _score 降序排序。
# 将用户查询结构按照年龄升序排序
SELECT * FROM USER ORDER BY AGE ASC
{
    "sort":{
        "AGE":{ "order":"asc" }
    }
}
多级排序
  • 当存在多级排序的场景时,结果首先按第一个条件排序,仅当结果集的第一个sort值完全相同时才会按照第二个条件进行排序。
{
    "sort":[
        {"AGE":{ "order":"asc" } },
        {"_score":{ "order":"desc" }}
    ]
}
字段多值排序
  • 当字段值为多值及字段多值排序,ElasticSearch会对数字或日期类型将多值字段转为单值,转化有min、max、avg、sum等4种模式
{
    "sort":{
        "AGE":{
            "order":"asc",
            "mode":"min"
        }
    }
}

分页子句

  • 和SQL使用LIMIT关键字返回单page结果的方式相同,ElasticSearch接受from(初始结果数量)和size(应该返回结果数量)参数
{
    "size": 10,
    "from": 1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
你好!关于学习Elasticsearch,我可以给你一些指导。Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于快速、实时地存储、搜索和分析大量数据。下面是一些学习Elasticsearch的步骤: 1. 了解基本概念:开始学习Elasticsearch之前,你需要了解一些基本的概念,比如索引(index)、类型(type)、文档(document)、字段(field)等。这将帮助你更好地理解Elasticsearch的工作原理。 2. 安装和配置:根据你的操作系统,你可以从Elasticsearch官方网站下载并安装合适的版本。安装完成后,你需要进行适当的配置,如设置集群名称、分配内存等。 3. 学习REST API:Elasticsearch提供了丰富的REST API,用于与其进行交互。了解如何使用这些API来索引、搜索和删除数据是学习Elasticsearch的重要一步。 4. 索引和搜索数据:学习如何创建索引、添加文档以及执行搜索操作是使用Elasticsearch的关键。掌握查询语法、过滤器、聚合操作等功能可以帮助你更有效地使用Elasticsearch。 5. 数据建模和分析:学习如何设计合适的数据模型和映射,以及如何使用Elasticsearch进行数据分析和可视化是提高你的技能的重要一步。 6. 扩展和优化:学习如何在生产环境中扩展和优化Elasticsearch集群是非常重要的。了解如何分片、复制、调优性能等将帮助你更好地管理和维护你的数据。 7. 学习资源:除了官方文档,还有很多优秀的学习资源可供参考,如书籍、教程和在线课程等。利用这些资源可以更系统地学习和掌握Elasticsearch。 希望这些步骤能对你学习Elasticsearch有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值