elasticsearch快速入门,一篇就够了,上手使用!

这篇具有很好参考价值的文章主要介绍了elasticsearch快速入门,一篇就够了,上手使用!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

elasticsearch快速入门,一篇就够了,上手使用!

elasticsearch

spring整合es

1.导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>


<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.7.graal</version>
</dependency>

2.配置类

初始化配置bean,扔到ioc容器内

host链接–>builder–>RestHighLevelClient

@Configuration
public class ElasticSearchConfig {
    
    @Value("${spring.elasticsearch.uris}")
    private String httpPath;

    @Bean
    RestHighLevelClient restHighLevelClient(){
        
        HttpHost host = HttpHost.create(httpPath);//创建httpHost
        RestClientBuilder builder = RestClient.builder(host);//根据host建立此属性的服务器
        RestHighLevelClient client = new RestHighLevelClient(builder);//创建服务器对象
        return client;
    }
    
}

3.测试类

@Autowired
@Qualifier("restHighLevelClient")//避免按名称找不到
private RestHighLevelClient restHighLevelClient;
/**
 *测试
 **/
//创建索引 client.indices().create()
@Test
void TestCreateIndex() throws IOException {
    CreateIndexRequest request = new CreateIndexRequest("user");
    CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
    System.out.println(createIndexResponse);
}

//删除索引 client.indices().delete()
@Test
void TestDeleteIndex() throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest("user2");
    //delete
    AcknowledgedResponse delete = restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);
    System.out.println(delete);
}
//添加文档 client.index()
@Test
void TestAddDocument() throws IOException {
    User user = new User();
    user.setUsername("zhangsan");
    user.setAge(20);

    //创建请求
    IndexRequest request = new IndexRequest("user");
    //规则:put /indexName/_doc/1
    request.id("2");
    request.timeout(TimeValue.timeValueSeconds(1));
    request.timeout("5s");

    //数据放入请求
    request.source(JSON.toJSONString(user), XContentType.JSON);
    //向客户端发送请求,获取响应结果
    IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);//这里用的index
    System.out.println(indexResponse.toString());

    //命令返回的状态
    System.out.println(indexResponse.status());
}


//获取文档,判断是否存在 get /index/doc/1
@Test
void TestIfExist() throws IOException {
    GetRequest getRequest = new GetRequest("user","2");
    //请求发送出去,得到响应
    GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
    System.out.println(getResponse.getSourceAsString());//要看的是响应内的资源
    System.out.println(getResponse);
}
//更新文档的信息 updateRequest.doc(实体的json)   client.update(请求)
@Test
void TestUpdateDocument() throws IOException {
    UpdateRequest updateRequest = new UpdateRequest("user","2");
    updateRequest.timeout("5s");
    User user = new User();
    user.setUsername("蟹老板");
    user.setAge(40);
    updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
    UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);//发送请求
    System.out.println(updateResponse.status());
}

//删除文档信息
@Test
void TestDeleteDocumentInfo() throws IOException {
    DeleteRequest request = new DeleteRequest("user","2");
    request.timeout("5s");
    //发送请求
    DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
    System.out.println(deleteResponse);
}

//批量插入数据
@Test
void TestBulkRequest() throws IOException {
    BulkRequest bulkRequest = new BulkRequest();//存放一堆请求
    bulkRequest.timeout("10s");
    List<User> list = new ArrayList<>();
    list.add(new User("zysheep1", 1));
    list.add(new User("zysheep2", 2));
    list.add(new User("zysheep3", 3));
    list.add(new User("zysheep4", 5));
    list.add(new User("zysheep5", 6));
    list.add(new User("zysheep7", 7));

    for(int i=0;i<list.size();i++){
        bulkRequest.add(new IndexRequest("user").id(""+(i+1)).source(JSON.toJSONString(list.get(i)),XContentType.JSON));
    }

    //发送
    BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println(bulkResponse);
}

//查询
/**
 * 查询
 * SearchRequest 搜索请求
 * SearchSourceBuilder 条件构造
 * HighlightBuilder 构建高亮
 * TermQueryBuilder 精确查询
 * MatchAllQueryBuilder匹配所有
 * QueryBuilder 对应我们刚才看到的命令!
 * 查询条件,我们可以使用 QueryBuilders 工具来实现
 * QueryBuilders.termQuery 精确
 * QueryBuilders.matchAllQuery() 匹配所有
 */
@Test
void TestSearch() throws IOException {
    SearchRequest searchRequest = new SearchRequest("user");
    //构建搜索条件,这里且设置高亮
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.highlighter();//高亮
    //精确查询
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("username","zysheep1");

    searchSourceBuilder.query(termQueryBuilder);
    searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

    searchRequest.source(searchSourceBuilder);

    SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

    System.out.println(searchResponse.getHits());
    for(SearchHit hit : searchResponse.getHits().getHits()){
        System.out.println(hit.getSourceAsMap());
    }

}

项目实战

1.导入依赖

<dependencies>
    <!-- jsoup解析页面 -->
    <!-- 解析网页 爬视频可 研究tiko -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.2</version>
    </dependency>
    <!-- fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.70</version>
    </dependency>
    <!-- ElasticSearch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    <!-- thymeleaf -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- devtools热部署 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <!--  -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <!-- lombok 需要安装插件 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!-- test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2.导入前端素材

链接:https://pan.baidu.com/s/1M5uWdYsCZyzIAOcgcRkA_A
提取码:qk8p
复制这段内容后打开百度网盘手机App,操作更方便哦

3.application配置文件

server:
  port: 80

spring:
  elasticsearch:
    uris: http://localhost:9200

#关闭thymeleaf缓存
  thymeleaf:
    cache: false

4.先来测试一下controller和view

@Controller
public class IndexController {
    @GetMapping("/index")
    public String index(){
        return "/index";
    }
}

如果说是无法解析MVC视图的就导入一下下面这个依赖

        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>

测试结果:

elasticsearch快速入门,一篇就够了,上手使用!

5.爬取jd官网的数据

@Component
public class HtmlParseUtil {

    public static List<Content> parseJD (String keywords) throws Exception {
        //获取请求

        String url = "https://search.jd.com/Search?keyword="+keywords;
        //解析网页
        Document document = Jsoup.parse(new URL(url),30000);

        Element element = document.getElementById("J_goodsList");
        //获取所有的li元素
        Elements elements = element.getElementsByTag("li");
        //System.out.println(elements.html());

        List<Content> goodsList = new ArrayList<>();
        //获取所有的li元素
        for(Element el:elements){
            //关于图片:所有的图片都是延迟加载的
            String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");
            String price = el.getElementsByClass("p-price").eq(0).text();
            String title = el.getElementsByClass("p-name").eq(0).text();

            Content content = new Content();
            content.setTitle(title);
            content.setImg(img);
            content.setPrice(price);

            goodsList.add(content);
        }
        return goodsList;
    }
    //测试获取
    public static void main(String[] args) throws Exception {
        new HtmlParseUtil().parseJD("代码").forEach(System.out::println);
    }


}

elasticsearch快速入门,一篇就够了,上手使用!

6.config类

elasticsearchConfig类---->restHighLevelClient放入ioc

@Configuration
public class ElasticSearchConfig {

    @Value("${spring.elasticsearch.uris}")
    private String httpPath;

    @Bean
    RestHighLevelClient restHighLevelClient(){

        HttpHost host = HttpHost.create(httpPath);//创建httpHost
        RestClientBuilder builder = RestClient.builder(host);//根据host建立此属性的服务器
        RestHighLevelClient client = new RestHighLevelClient(builder);//创建服务器对象
        return client;
    }

}

7.service层

@Service
public class ContentService {
    @Autowired
    private RestHighLevelClient restHighLevelClient;

    //1.解析数据放入es
    public Boolean parseContent(String keywords) throws Exception {
        //获取数据
        List<Content> contents = HtmlParseUtil.parseJD(keywords);
        //将内容放入es
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("2m");
        for(int i=0;i<contents.size();i++){
            bulkRequest.add(
                    new IndexRequest("jd_goods")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(contents.get(i)), XContentType.JSON)
            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        
        restHighLevelClient.close();
        return !bulk.hasFailures();
    }
}

elasticsearch快速入门,一篇就够了,上手使用!

基本查询的步骤:
1.QueryBuilders.termQuery("title",keyWord) 然后形成精准查询termQueryBuilder
2.将精准查询ilder
3.将搜索资源放入搜索请求searchRequest
4.将请求给Client然后执行请求即可
//获取这些数据实现搜索功能
public List<Map<String,Object>> searchPage(String keyWord,int pageNo,int pageSize) throws IOException {
    if(pageNo<=1){
        pageNo=1;
    }
    //建立查询请求和请求资源
    SearchRequest searchRequest = new SearchRequest("jd_goods");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

    //分页功能
    searchSourceBuilder.from(pageNo);
    searchSourceBuilder.size(pageSize);

    //精准查询
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title",keyWord);

    //精准查询放入资源,且进行设置时限
    searchSourceBuilder.query(termQueryBuilder);
    searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

    //资源放入查询请求
    searchRequest.source(searchSourceBuilder);

    //交给客户端
    SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

    //解析结果
    ArrayList<Map<String, Object>> list = new ArrayList<>();
    for (SearchHit documentFields : searchResponse.getHits().getHits()) {
        list.add(documentFields.getSourceAsMap());
    }
    return list;
}

8.controller层

@Controller
public class IndexController {

    @Autowired
    private ContentService contentService;

    @GetMapping("/index")
    public String index(){
        return "/index";
    }

    @ResponseBody
    @GetMapping("/parse/{keyword}") //感觉关键词去京东官网爬取数据然后保存到ES
    public Boolean parse(@PathVariable("keyword") String keyword) throws Exception {
        return contentService.parseContent(keyword);
    }

    @ResponseBody
    @GetMapping("/search/{keyword}/{pageNo}/{pageSize}")
    public List<Map<String,Object>> search(
            @PathVariable("keyword") String keyword,
            @PathVariable("pageNo") int pageNo,
            @PathVariable("pageSize") int pageSize) throws IOException {
        return contentService.searchPage(keyword, pageNo, pageSize);
    }

}

9.view层

✒️导入Vue和axios : 创建个文档然后node.js即可

npm init
npm install vue
npm install axios

elasticsearch快速入门,一篇就够了,上手使用!

部分html

<!--搜索 : 1.对input的v-model绑定 2.对点击事件的绑定-->
<div id="mallSearch" class="mall-search">
    <form name="searchTop" class="mallSearch-form clearfix">
        <fieldset>
            <legend>天猫搜索</legend>
            <div class="mallSearch-input clearfix">
                <div class="s-combobox" id="s-combobox-685">
                    <div class="s-combobox-input-wrap" >
                        <input v-model="keywords" type="text" autocomplete="off" value="dd" id="mq"
                               class="s-combobox-input" aria-haspopup="true">
                    </div>
                </div>
                <button type="submit" id="searchbtn" @click.prevent="searchKey">搜索</button>
            </div>
        </fieldset>
    </form>
    <ul class="relKeyTop">
        <li><a>狂神说Java</a></li>
        <li><a>狂神说前端</a></li>
        <li><a>狂神说Linux</a></li>
        <li><a>狂神说大数据</a></li>
        <li><a>狂神聊理财</a></li>
    </ul>
</div>
<!-- 商品详情 -->
<div class="view grid-nosku">

    <div class="product" v-for="result in results">
        <div class="product-iWrap">
            <!--商品封面-->
            <div class="productImg-wrap">
                <a class="productImg">
                    <img :src="result.img">
                </a>
            </div>
            <!--价格-->
            <p class="productPrice">
                <em><b>¥</b>{{result.price}}</em>
            </p>
            <!--标题-->
            <p class="productTitle">
                <a>{{result.title}}<</a>
            </p>
            <!-- 店铺名 -->
            <div class="productShop">
                <span>店铺: wxp的小黑店 </span>
            </div>
            <!-- 成交信息 -->
            <p class="productStatus">
                <span>月成交<em>999笔</em></span>
                <span>评价 <a>3</a></span>
            </p>
        </div>
    </div>
</div>
<script th:src="@{/js/axios.min.js}"></script>
<script th:src="@{/js/vue.js}"></script>
<script>
    new Vue({
        el:'#app',
        data:{
            keyword:'',//关键词
            results:[]//搜索的结果
        },
        methods:{
            searchKey(){
                var keyword = this.keyword;
                //对接后端接口
                axios.get('search/' + keyword + "/1/10").then(resp=>{
                    this.results = resp.data;
            })
            }
        }
    })
</script>

elasticsearch快速入门,一篇就够了,上手使用!

elasticsearch

ElasticSearch 的 Client

ElasticSearch 官方提供了 3 个 Client,具体如下:

  • org.elasticsearch.client.transport.TransportClient
  • org.elasticsearch.client.RestClient
  • org.elasticsearch.client.RestHighLevelClient

TransportClient 位于 Elasticsearch 包下,是 Elasticsearch 官方早期支持的 ElasticSearch Client,但是在 ElasticSearch 7.x 版本中已经标注为 Deprecated,并且将在 8.0 版本中移除,所以建议不使用 TransportClient 作为 ElasticSearch Client。

RestHighLevelClient 是 TransportClient 的直接替代者,也是 ElasticSearch 官方推荐和默认的 Client(松哥注:该客户端在最新版本中已经废弃)。

除了 ElasticSearch 官方提供的 Client,spring-data-elasticsearch 还支持响应式的客户端 ReactiveElasticsearchClient。ReactiveElasticsearchClient 是基于 WebClient 技术实现的 ElasticSearch Client,依赖于 Spring 的响应式栈。响应式栈在本书中不会涉及。文章来源地址https://www.toymoban.com/news/detail-400841.html

client.transport.TransportClient

  • org.elasticsearch.client.RestClient
  • org.elasticsearch.client.RestHighLevelClient

TransportClient 位于 Elasticsearch 包下,是 Elasticsearch 官方早期支持的 ElasticSearch Client,但是在 ElasticSearch 7.x 版本中已经标注为 Deprecated,并且将在 8.0 版本中移除,所以建议不使用 TransportClient 作为 ElasticSearch Client。

RestHighLevelClient 是 TransportClient 的直接替代者,也是 ElasticSearch 官方推荐和默认的 Client(松哥注:该客户端在最新版本中已经废弃)。

除了 ElasticSearch 官方提供的 Client,spring-data-elasticsearch 还支持响应式的客户端 ReactiveElasticsearchClient。ReactiveElasticsearchClient 是基于 WebClient 技术实现的 ElasticSearch Client,依赖于 Spring 的响应式栈。响应式栈在本书中不会涉及。

到了这里,关于elasticsearch快速入门,一篇就够了,上手使用!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python入门,一篇就够了

    函数必须写注释:文档注释格式 \\\'\\\'\\\'注释内容\\\'\\\'\\\' 参数中的等号两边不要用空格 相邻函数用两个空行隔开 小写 + 下划线 函数名 模块名 实例名 驼峰法 类名 结构化类型,有一系列的属性和类型 标量类型,此对象无可访问的内部对象 python 中,整型相除默认是浮点型 建议:使用

    2024年02月15日
    浏览(39)
  • Elasticsearch的安装及使用,这一篇就够了

      Elasticsearch是一个基于Apache Lucene的开源搜索引擎。Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 特点: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎–做不规则查询 可以扩展到上百台服务器,处理PB级结

    2024年02月05日
    浏览(54)
  • Git、GitHub、Gitee快速上手,看这篇就够了

      目录 第1章  Git 概述 1.1 何为版本控制 1.2 为什么需要版本控制 1.3 版本控制工具 1.4 Git 简史   1.5 Git 工作机制   1.6 Git 和代码托管中心 第2章 Git 安装 第 3 章 Git 常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库状态   3.3.1 首次查看(工作区没有任何文件) 3.3.2 新

    2024年02月03日
    浏览(44)
  • docker入门,这一篇就够了。

    Docker容器虚拟化平台。 今天跟大家分享一下我的docker学习历程,也算是我的独特的复习笔记,我会在这一篇中讲清楚docker几乎所有的功能。不过也是我第一次写,而且是一篇两万多字的长文,花了我半个月里所有的休闲娱乐时间,所以写的不好的地方请大家见谅,也请在评论

    2024年02月03日
    浏览(60)
  • Docker快速部署RabbitMq教程,这一篇就够了!

    目录 1、拉取RabbitMQ镜像 2、创建RabbitMQ容器  3、验证是否安装成功 4、后台管理页面无法打开问题 要快速部署RabbitMQ,可以使用Docker容器来简化过程。下面是使用Docker快速部署RabbitMQ的教程。 1、拉取RabbitMQ镜像 在终端中执行以下命令,拉取RabbitMQ的镜像到本地: 注意:在此处

    2024年03月21日
    浏览(46)
  • elasticsearch下载和安装(linux)看这一篇就够了

    在文件的最下面添加 然后:wq退出执行下面的命令生效 第一个坑 elasticsearch的版本选择 版本建议就按照我给的安装因为和java环境是配套的,java版本需要11以上的 修改集群名称 修改当前的 es 节点名称 修改data数据保存地址和日志数据保存地址 绑定 es 网络 ip 集群节点修改为之

    2024年01月19日
    浏览(68)
  • kafka入门用这一篇就够了!

    目录 1,kafka简单介绍 2,kafka使用场景 3,kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 提交策略 零拷贝技术(netty) kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。

    2024年01月25日
    浏览(41)
  • MASA Blazor入门这一篇就够了

    ASP.NET Core Blazor 简介 Blazor 是一个使用 Blazor 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI。 共享使用 .NET 编写的服务器端和客户端应用逻辑。 将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。 与新式托管平台(如 Docke

    2024年02月05日
    浏览(48)
  • JavaScript 入门(简单易懂) 看这一篇就够了

    目录 1、什么是JavaScript 1.1、概述 1.2、历史 2、快速入门 2.1、引入引入JavaScript 2.2、基本语法 2.3、数据类型 2.4、严格检查模式 3、数据类型 3.1、字符串 3.2、数组 3.3、对象 3.4、流程控制 3.5、Map和Set 3.6 iterator 3.7数据类型转换字符串类型 3.8数据类型转换数字型(重点) 3.9标识

    2024年02月02日
    浏览(102)
  • 【JavaWeb】入门一篇就够了—学习笔记整理

    ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆 顺着尚硅谷的资料一路学习过来的,整理了JavaWeb基础篇的内容,

    2023年04月10日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包