九、ElasticSerach高级搜索

9.1、索引别名的使用

在开发中,随着业务需求的迭代,较老的业务逻辑就要面临更新甚至是重构,而对于es来说,为了适应新的业务逻辑,可能就要对原有的索引做一些修改,比如对某些字段做调整,甚至是重建索引。而做这些操作的时候,可能会对业务造成影响,甚至是停机调整等问题。由此,es提供了索引别名来解决这些问题。 索引别名就像一个快捷方式或是软连接,可以指向一个或多个索引,也可以给任意一个需要索引名的API来使⽤用。别名的应用为程序提供了极大地灵活性。

9.1.1、查询别名GET请求

请求

# 查询malamala别名
http://localhost:9200/malamala/_alias

# 查询所有别名
http://localhost:9200/_aliases

响应

es java chaxun esjava查询所有索引的名称_开发语言

9.1.2、新增别名POST请求

请求

http://localhost:9200/_aliases

请求体

{
    // 语义:malamala新建别名malamala_v1.0
  	"actions": [
    	{
      		"add": {
        		"index": "malamala",
        		"alias": "malamala_v1.0"
      		}
    	}
  	]
}

响应

es java chaxun esjava查询所有索引的名称_es java chaxun_02

9.1.3、删除别名POST请求

请求

http://localhost:9200/_aliases

请求体

{
  	// 语义: 删除malamala的nba_v1.0别名
  	"actions": [
    	{
      		"remove": {
        		"index": "malamala",
        		"alias": "malamala_v1.0"
      		}
    	}
  	]
}

响应

es java chaxun esjava查询所有索引的名称_后端_03

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"
      		}
    	}
  	]
}

响应

es java chaxun esjava查询所有索引的名称_java_04

9.1.5、通过别名获取索引GET请求

请求

http://localhost:9200/malamala_v2.0

响应(数据太长了,就不用展开的json格式了)

es java chaxun esjava查询所有索引的名称_es java chaxun_05

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"
      }
    }
  }
}

响应

es java chaxun esjava查询所有索引的名称_es java chaxun_06

9.3.2、phrase suggester使用POST请求

phrase短语建议,在term的基础上会考量多个term之间的关系,比如是否同时出现在索引的原文里,相邻程度,以及词频等

请求

http://localhost:9200/malamala_v2.0/_search

请求体

{
     "suggest": {
          "my-suggest": {
               "text": "超级逗比",
               "phrase": {
                    "field": "name"
               }
          }
     }
}

响应

es java chaxun esjava查询所有索引的名称_java_07