在使用Elasticsearch的过程中,难免会要去官网翻看文档,由于目前还没有读完文档,以至于在找一些没用过的API时还挺费劲,有时候甚至还可能找不到。因此就把目前已经用到过的地方在这里汇总记录一下,方便以后碰到的话可以直接去查看。
Index
Aliases
索引的一个别名,在某些情况下非常有用,比如在无缝切换索引的时候。
Mappings
索引的mapping定义十分重要,他决定了我们的数据是如何保存在索引内,以及保存的数据都有什么字段,各个字段的数据类型又是什么。
Setting
Query
Full text queries
全文检索相关,主要包含match query、match_bool_prefix query、match_phrase query、match_phrase_prefix query、multi_match query、query_string query、match_bool_prefix query、match_phrase query、match_phrase_prefix query、multi_match query、query_string query等
Compound queries
混合索引,包含bool query、boosting query、constant_score query、dis_max query、function_score query
Function score query
用户可以通过自定义一个或多个查询语句来提高某些文档的比分权重,
还可以通过script_score使用脚本给每个文档重新打分
Highlight
Prefix query
使用前缀查询可以返回前缀为指定前缀的文档,多用于即时搜索一类的提示。
Match phrase prefix query
当需要对一个短语或词组进行前缀查询时,就需要用到来进行搜索了
Named query
通过使用_name
参数可以在多字段查询时知道是哪个子查询语句命中了该文档,并将结果返回在每个响应文档的matched_queries
字段内。
- https://www.elastic.co/guide/en/elasticsearch/reference/7.16/query-dsl-bool-query.html#named-queries
Nested query
Exists query
在某些情况下,并不是所有的字段都存在确切的值,可以通过Exists来或者筛选包含某些字段的文档,同时配合must_not可以来筛选所有存在该字段的文档。
Scripts
ES的脚本语言是painless
,语法与Java类似,可直接按照Java的语法来编写检索脚本,具体可见地址:Shard API 。
这里只记录一下自己使用到的,以便以后再遇到可直接CV。
删除数组内满足条件的元素
使用removeIf来完成,例如删除ID为10的元素
{
"script": {
"source": "ctx._source.members.removeIf(list_item -> list_item.id == params.member_id)",
"lang": "painless",
"params": {
"member_id": 10
}
}
}
判断数组内是否包含某一个对象
使用contains来完成,返回包含name
为张三的文档
{
"script": {
"source": "ctx._source.members.contains(params.name)",
"lang": "painless",
"params": {
"name": "张三"
}
}
}
根据时间提高某些文档的权重
使用时间格式化方法toInstant和toEpochMilli来完成,将时间转换成毫秒级权重因子
{
"script": {
"lang": "painless",
"source": "double dateScore; try {dateScore = Math.abs(doc['enforcementDate'].value.toInstant().toEpochMilli()/1e12);} catch (Exception e) {dateScore=0;} return dateScore;"
}
}