九、ElasticSerach高级搜索
9.1、索引别名的使用
在开发中,随着业务需求的迭代,较老的业务逻辑就要面临更新甚至是重构,而对于es来说,为了适应新的业务逻辑,可能就要对原有的索引做一些修改,比如对某些字段做调整,甚至是重建索引。而做这些操作的时候,可能会对业务造成影响,甚至是停机调整等问题。由此,es提供了索引别名来解决这些问题。 索引别名就像一个快捷方式或是软连接,可以指向一个或多个索引,也可以给任意一个需要索引名的API来使⽤用。别名的应用为程序提供了极大地灵活性。
9.1.1、查询别名GET请求
请求
# 查询malamala别名
http://localhost:9200/malamala/_alias
# 查询所有别名
http://localhost:9200/_aliases
响应
9.1.2、新增别名POST请求
请求
http://localhost:9200/_aliases
请求体
{
// 语义:malamala新建别名malamala_v1.0
"actions": [
{
"add": {
"index": "malamala",
"alias": "malamala_v1.0"
}
}
]
}
响应
9.1.3、删除别名POST请求
请求
http://localhost:9200/_aliases
请求体
{
// 语义: 删除malamala的nba_v1.0别名
"actions": [
{
"remove": {
"index": "malamala",
"alias": "malamala_v1.0"
}
}
]
}
响应
9.1.4、重命名别名POST请求
请求
http://localhost:9200/_aliases
请求体
{
// 先删除malamala_v1.0别名,再新增malamala_v2.0别名,即是重命名
"actions": [
{
"remove": {
"index": "malamala",
"alias": "malamala_v1.0"
}
},
{
"add": {
"index": "malamala",
"alias": "malamala_v2.0"
}
}
]
}
响应
9.1.5、通过别名获取索引GET请求
请求
http://localhost:9200/malamala_v2.0
响应(数据太长了,就不用展开的json格式了)
9.2、refresh操作
理想的搜索
1、新的数据一添加到索引中立马就能搜索到,但是真实情况不是这样的
2、我们使⽤链式命令请求,先添加一个⽂档,再立刻搜索
curl -X PUT localhost:9200/star/_doc/888 -H 'Content-Type:application/json' -d '{ "displayName": "蔡徐坤" }'
curl -X GET localhost:9200/star/_doc/_search?pretty
3、强制刷新
curl -X PUT localhost:9200/star/_doc/666?refresh -H 'Content-Type:application/json' -d '{ "displayName": "杨超越" }'
curl -X GET localhost:9200/star/_doc/_search?pretty
4、修改默认更新时间(默认时间是1s)
PUT 请求
http://localhost:9200/star/_settings
请求体
{
"index":{
"refresh_interval": "5s"
}
}
响应
{
"acknowledged": true
}
5、将refresh关闭
PUT 请求
http://localhost:9200/star/_settings
请求体
{
"index":{
"refresh_interval": "-1"
}
}
响应
{
"acknowledged" : true
}
9.3、查询建议
查询建议,是为了给用户提供更好的搜索体验。包括:词条检查,自动补全
Suggester:
1、Term suggester
2、Phrase suggester
text | 指定搜索文本 |
field | 获取建议词的搜索字段 |
analyzer | 指定分词器 |
size | 每个词返回的最大建议词数 |
sort | 如何对建议词进行排序,可用选项: score:先按评分排序、再按文档频率排、term顺序; frequency:先按文档频率排,再按评分、term顺序排。 |
suggest_mode | 建议模式,控制提供建议词的方式: missing:仅在搜索的词项在索引中不存在时才提供建议词,默认值; popular:仅建议文档频率比搜索词项高的词; always:总是提供匹配的建议词 |
9.3.1、term suggester使用POST请求
term词条建议器,对给输入的文本进行分词,为每个分词提供词项建议
请求
http://localhost:9200/malamala_v2.0/_search
请求体
{
"suggest": {
"my-suggest": {
"text": "逗比组",
"term": {
"suggest_mode": "missing",
"field": "team_name"
}
}
}
}
响应
9.3.2、phrase suggester使用POST请求
phrase短语建议,在term的基础上会考量多个term之间的关系,比如是否同时出现在索引的原文里,相邻程度,以及词频等
请求
http://localhost:9200/malamala_v2.0/_search
请求体
{
"suggest": {
"my-suggest": {
"text": "超级逗比",
"phrase": {
"field": "name"
}
}
}
}
响应