(十)ElasticSearch高级使用【别名,重建索引,refresh操作,高亮查询,查询建议】

1.别名使用

1)别名作用

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

2)别名使用

查询

GET /_alias

创建别名

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_data_index",
        "alias": "current_data"
      }
    }
  ]
}

删除别名

POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "my_data_index",
        "alias": "current_data"
      }
    }
  ]
}

2.重建索引

在 Elasticsearch 中,重建索引是一项重要的操作,通常用于更新或优化现有索引。以下是有关如何执行重建索引的一些建议和步骤:

1)备份数据

在执行重建索引之前,确保你有原始索引的备份。这是因为重建索引会创建一个新的索引,然后将数据从旧索引复制到新索引。如果出现问题,你可以回滚到原始索引。

2)创建新索引

首先,你需要创建一个新的索引,用于存储重新索引后的数据。你可以使用 Elasticsearch 的索引模板和设置来定义新索引的配置,确保它符合你的需求。

PUT /new_index
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "_doc": {
      "properties": {
        "field1": { "type": "text" },
        "field2": { "type": "keyword" }
      }
    }
  }
}

3)执行重建

使用 Elasticsearch 的 Reindex API:这是一种安全的方法,它允许你从旧索引到新索引复制数据,并提供了一些高级选项来处理数据转换和过滤等任务。

POST /_reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  }
}

使用 Logstash 或其他 ETL 工具:如果你有复杂的数据转换需求,可以考虑使用 Logstash 或其他 ETL(Extract, Transform, Load)工具来从旧索引导出数据并将其导入新索引

4)测试和验证

在执行重建操作后,务必进行测试和验证以确保新索引中的数据与旧索引中的数据一致。你可以执行一些查询和聚合操作,以验证数据的准确性。

5)更新别名

一旦你验证了新索引中的数据,可以更新别名,将其指向新索引,以便应用程序可以开始使用新索引中的数据。

POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "old_index",
        "alias": "my_alias"
      }
    },
    {
      "add": {
        "index": "new_index",
        "alias": "my_alias"
      }
    }
  ]
}

6)清理旧索引

一旦你确认新索引正常工作,可以考虑删除或归档旧索引,以释放磁盘空间并减轻集群负载。

3.refresh操作

在 Elasticsearch 中,refresh 操作用于使新索引数据在搜索前立即可见。默认情况下,Elasticsearch 具有自动刷新机制,索引每秒自动刷新一次,以使新的文档和更改对搜索可见。

修改默认更新时间(默认时间是1s,-1为关闭)

PUT /star/_settings
{
 "index": {
 "refresh_interval": "5s"
 }
}

有时你可能需要手动执行 refresh 操作以确保最新的数据立即可用。

POST /my_index/_refresh

4.es高亮查询

在执行搜索查询时,你可以使用 highlight 参数来请求高亮信息。以下是一个简单的示例:

1)高亮查询

GET /my_index/_search
{
  "query": {
    "match": {
      "content": "关键词"
    }
  },
  "highlight": {
    "fields": {
      "content": {} // 高亮的字段
    }
  }
}

在上面的示例中,我们执行了一个简单的全文搜索查询,目标是 content 字段中包含关键词 “关键词” 的文档。高亮信息将包含在响应中。

2)解析高亮结果

在查询结果中,你将看到一个名为 highlight 的部分,它包含了高亮信息。你可以从中提取高亮的文本以及它们的位置。

"hits": {
  "total": 3,
  "hits": [
    {
      "_source": {
        "content": "这是包含关键词的文本。"
      },
      "highlight": {
        "content": [
          "这是包含 <em>关键词</em> 的文本。"
        ]
      }
    }
  ]
}

3)自定义高亮样式

默认情况下,高亮文本使用 标签标记,但你可以根据需要自定义高亮的样式。你可以在查询中使用 pre_tags 和 post_tags 参数定义前缀和后缀标签。

"highlight": {
  "fields": {
    "content": {}
  },
  "pre_tags": ["<span class='highlight'>"],
  "post_tags": ["</span>"]
}

4.es查询建议

Elasticsearch 提供了几种不同类型的查询建议器,包括 Term Suggester(词语建议器)、Phrase Suggester(短语建议器)和 Completion Suggester(自动完成建议器)。让我分别解释它们的作用和用法:

1)Term Suggester(词语建议器)

作用:Term Suggester 用于纠正拼写错误,提供与用户输入的单个词语最接近的建议。
用法:你可以在查询请求中使用 Term Suggester 来提供词语级别的建议。它通常用于搜索引擎的搜索框,以帮助用户纠正拼写错误并提供相关的建议。
示例:

POST /my_index/_search
{
  "suggest": {
    "my-suggestion": {
      "text": "applle",
      "term": {
        "field": "product_name"
      }
    }
  }
}

2)Phrase Suggester(短语建议器)

作用:Phrase Suggester 用于提供纠正的短语或建议,而不仅仅是单个词。
用法:你可以在查询请求中使用 Phrase Suggester 来提供短语级别的建议。它通常用于搜索引擎的搜索框,以帮助用户在纠正拼写错误的同时提供整个查询短语的建议。
示例:

POST /my_index/_search
{
  "suggest": {
    "my-suggestion": {
      "text": "red bbaloon",
      "phrase": {
        "field": "product_name"
      }
    }
  }
}

3)Completion Suggester(自动完成建议器)

作用:Completion Suggester 用于实现自动完成搜索,根据用户输入的一部分提供建议。
用法:通常在搜索框中,当用户键入查询的一部分时,Completion Suggester 提供可能的建议,以帮助用户更快地完成输入。
示例:

POST /my_index/_search
{
  "suggest": {
    "my-suggestion": {
      "prefix": "app",
      "completion": {
        "field": "product_name.suggest"
      }
    }
  }
}

请注意,对于 Completion Suggester,通常需要在索引映射中定义一个专门的 “completion” 字段,以便支持自动完成建议。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,以下是使用Elasticsearch Java API进行别名查询的示例: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticsearchAliasQueryExample { public static void main(String[] args) { // 创建RestHighLevelClient实例 RestHighLevelClient client = new RestHighLevelClient(); try { // 创建SearchRequest对象 SearchRequest searchRequest = new SearchRequest("your_index_name"); // 创建SearchSourceBuilder对象 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 设置查询条件,这里使用别名查询 searchSourceBuilder.query(QueryBuilders.termQuery("your_alias_name", "your_search_term")); // 将SearchSourceBuilder对象设置到SearchRequest中 searchRequest.source(searchSourceBuilder); // 执行查询 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理查询结果 // ... } catch (IOException e) { e.printStackTrace(); } finally { // 关闭RestHighLevelClient连接 try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 请注意,上述示例中的"your_index_name"和"your_alias_name"需要替换为实际的索引名称和别名名称。"your_search_term"需要替换为您要搜索的实际术语。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值