ElasticSearch 学习笔记:常用内容

本文目录

1 创建索引(Index)

2 修改索引

3 查询

4 相关文章


1 创建索引(Index)

PUT /<indexName>
{
    "settings":{
        ...
    },
    "mappings":{
        ...
    },
    "aliases":{
        ...
    }
}

1.1 Settings

"settings":{
	"number_of_shards":5,
	"number_of_replicas":1,
	"analysis":{
		"analyzer":{
			"[analyzer_name]":{
				"type":"...",
				"filter":[],
				"tokenizer":"..."
			}
		},
		"tokenizer":{
			"[tokenizer_name]":{
				"type":"...",
				"token_chars":[]
			}
		}
	}
}

说明:

number_of_shards: 集群分片数量(默认5)

number_of_replicas: 副本数量(默认1)

analysis: 分析器设置

1.2 Mappings

详见《ElasticSearch 学习笔记:Mapping》

1.3 Aliases

"aliases":{
    "<aliasesName>":{}
}

说明:设置索引别名,可通过别名对索引进行查询等操作。

建议:

由于ES索引大部分内容一旦创建成功,则无法修改,只能通过删除并重建来达到变更的目标。

因此,建议索引名称增加版本号(例如:demo-index-v1),同时,为索引创建别名(例如:demo-index)。

在程序中,统一使用别名对索引进行访问,当索引发生变动时,无需修改程序代码,仅需要创建新索引(例如:demo-index-v2),导入旧索引数据,并将旧索引别名迁至新索引即可。

2 修改索引

2.1 新增字段

PUT /<indexName>/_mappings/<typeName>/
{
    "properties":{
        ...
    }
}

说明:properties 参考 1.2 Mappings 中的properties内容。

2.2 新增分析器(Analysis)

POST /<indexName>/_close

PUT /<indexName>/_settings
{
  "analysis": {
    ...
  }
}

POST /<indexName>/_open

说明:新增分析器,需要先关闭索引,然后再添加分析器,最后重新打开索引。

3 查询

3.1 Bool

{
   "bool" : {
      "filter" :   [],
      "must" :     [],
      "must_not" : [],
      "should" :   [],
      "minumum_should_match" : 1
   }
}

说明:用于组合复杂的过滤或查询条件。

注意事项:

若不存在 filter 或 must 语句,should 语句中的条件至少需要满足一个;

若存在 filter 或 must 语句,需要通过 minimum_should_match 参数设置 should 语句中的条件至少需要满足几个。

3.2 Search After(深度分页)

通过 from 进行分页查询时,在深度分页情况下(查询页数很大),效率很低。

例如:当 from = 2000 且 size = 20 时,实际在各分片上都需要查询前2020个文档,然后再汇总到一起,取出汇总排序结果中的第2000-2019个文档,查询效率低下。

为了解决深度分页问题,ES提供了 search_after 查询关键字。每次分页查询,仅需提供上一分页查询中最后一项的排序字段值,即可实现分页查询,例如:

{
    "query":{
        "match_all":{

        }
    },
    "sort":[
        {
            "_score":{
                "order":"desc"
            }
        },
        {
            "uid":{
                "order":"asc"
            }
        }
    ],
    "size":20,
    "search_after":[
        22.73906,
        123456789
    ]
}

说明:通过 search_after 关键词分页查询,实际在各分片中,将直接根据上一项值,查询到各分片的下一页数据,然后只需要汇总各分片下一页数据(数量由 size 决定)并排序,根据最终排序返回结果。

注意事项:

search_after 指定的值的所属字段,必须与 sort 顺序一致。

例如,实例中,第一个必须是 _score 的值( 22.73906 ),第二个必须是 uid 的值(123456789)。

3.3 Profile

{
    "profile":true,
    "query":{
        ...
    },
    ...
}

说明:设置profile=true,在查询结果中,会包含各分片节点执行查询过程的详细数据,比如条件拆分情况、执行耗时情况等。

3.4 Highlighting

"highlight":{
    "pre_tags":["<tag>"],
    "post_tags":["</tag>"],
    "fields":{
        "<filedName>":{
            "fragment_size":150,
            "number_of_fragments":3,
            "highlight_query": {
                ...
            }
        },
        ...
    }
}

说明:在匹配查询中,通过highlighting设置,可在返回结果中,增加命中关键词的相关信息。

例如:可以通过 pre_tags 和 post_tags 在命中的关键词前后增加一些标签,示例结果如下:

{
    "_index":"demo-index-v1",
    "_type":"doc",
    "_id":"123456789",
    "_score":22.73906,
    "_source":{
        "uid":123456789,
        "uname":"Test_User",
        "intro":null,
        "deleted":false
    },
    "highlight":{
        "uname":[
            "<tag>T</tag><tag>e</tag><tag>s</tag><tag>t</tag>_User"
        ]
    }
}

4 相关文章

《ElasticSearch 学习笔记:Mapping》

《ElasticSearch 学习笔记:Multi Search》

《ElasticSearch 学习笔记:Reindex》

《ElasticSearch 学习笔记:聚合(Aggregation) - Top Hits》

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值