ElasticSearch学习(一)

本文详细介绍了ElasticSearch中的各种检索技巧,包括MATCH_ALL、MATCH、MULTI_MATCH、RANGE、TERM、TERMS、EXISTS、MISSING、BOOL、CONSTANT_SCORE等查询方式,以及_source子句和sort子句的使用方法。

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
}
【多变量输入超前多步预测】基于CNN-BiLSTM的光伏功率预测研究(Matlab代码实现)内容概要:本文介绍了基于CNN-BiLSTM模型的多变量输入超前多步光伏功率预测方法,并提供了Matlab代码实现。该研究结合卷积神经网络(CNN)强大的特征提取能力与双向长短期记忆网络(BiLSTM)对时间序列前后依赖关系的捕捉能力,构建了个高效的深度学习预测模型。模型输入包含多个影响光伏发电的气象与环境变量,能够实现对未来多个时间步长的光伏功率进行精确预测,适用于复杂多变的实际应用场景。文中详细阐述了数据预处理、模型结构设计、训练流程及实验验证过程,展示了该方法相较于传统模型在预测精度和稳定性方面的优势。; 适合人群:具备定机器学习和深度学习基础,熟悉Matlab编程,从事新能源预测、电力系统分析或相关领域研究的研发人员与高校研究生。; 使用场景及目标:①应用于光伏电站功率预测系统,提升电网调度的准确性与稳定性;②为可再生能源并网管理、能量存储规划及电力市场交易提供可靠的数据支持;③作为深度学习在时间序列多步预测中的典型案例,用于科研复现与教学参考。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注数据归化、CNN特征提取层设计、BiLSTM时序建模及多步预测策略的实现细节,同时可尝试引入更多外部变量或优化网络结构以进步提升预测性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值