ElasticSearch 7.6.1下载、使用及闪退问题

ElasticSearch概述

在这里插入图片描述
在这里插入图片描述

ElasticSearch下载、安装、闪退

ElasticSearch7.6.1 (内含代码笔记ElasticSearch.zip)
链接:https://pan.baidu.com/s/1QEKgvSr-7INjwBnO9XbQyg
提取码:kkds

要求:JDK1.8以上
Java开发,ElasticSearch的版本要和Java的核心jar包版本对应
elasticsearch-7.6.1文件下的内容
在这里插入图片描述

在这里插入图片描述
闪退问题
1.由于启东时默认运行内存为1g,内存不足导致启动失败,修改jvm.options,将1g改为256m
在这里插入图片描述
在这里插入图片描述
2.运行时出现此类报错,修改elasticsearch.yml文件,添加 xpack.ml.enabled: false 即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ElasticSearch-head-master 可视化界面

要求:已安装node.js
1.执行 cnpm install 下载依赖
在这里插入图片描述
2.执行 npm run start 启动
在这里插入图片描述
3.解决跨域问题
在这里插入图片描述
配置elasticsearch.yml文件,重新启动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ELK简介

在这里插入图片描述

Kibana安装

在这里插入图片描述
启动
在这里插入图片描述
访问端口5601
在这里插入图片描述
在这里插入图片描述
开发工具
在这里插入图片描述
汉化
配置 kibana.yml 后重启
在这里插入图片描述
添加 “zh-CN”
在这里插入图片描述

ES核心概念

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

IK分词器插件

在这里插入图片描述
安装
地址: https://github.com/medcl/elasticsearch-analysis-ik.

将ik解压至elasticsearch的plugins文件夹中
在这里插入图片描述
重启ES

ik插件被加载
在这里插入图片描述
使用kibana测试

ik_smart 最少划分
在这里插入图片描述
ik_max_word 最细粒度划分
在这里插入图片描述
发现自己需要的词被拆分,需要自己添加到分词器的字典中
在这里插入图片描述
在ik分词器中添加自己的配置
在对应文件夹下创建自己的词库
在这里插入图片描述
在这里插入图片描述
将词典添加至IKAnalyzer.cfg.xml中 重启ES
在这里插入图片描述

在这里插入图片描述

Rest风格操作

在这里插入图片描述

索引的基本操作

1.创建一个索引

PUT /索引名/类型名/文档id
{请求体}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.创建索引并指定字段类型
在这里插入图片描述
3.通过get获得相应的信息
在这里插入图片描述
4.查看默认的信息

创建test3索引
在这里插入图片描述
默认创建类型
在这里插入图片描述
在这里插入图片描述
5.修改索引
在这里插入图片描述
在这里插入图片描述
6.删除索引
在这里插入图片描述
在这里插入图片描述

文档的基本操作(重点)

基本操作
1.添加数据

put /kaungshen/user/1
{
  "name":"狂神说",
  "age":"23",
  "desc":"你好,世界",
  "tags": ["技术宅","温暖","直男"]
}

在这里插入图片描述
2.查询数据
在这里插入图片描述
3.更新数据PUT
在这里插入图片描述
推荐使用 POST 更新方式
post 后面没有 _update 时没有修改的值会为空和put一样
在这里插入图片描述
在这里插入图片描述
post后面加有 /_update 时 没有修改的值不会空

POST /kaungshen/user/2/_update
{
  "doc":{
    "name": "酷裤的森"
  }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

复杂操作(重点)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
过滤返回结果
在这里插入图片描述
排序
在这里插入图片描述
分页查询
在这里插入图片描述
布尔值查询
must 的作用相当于 and
在这里插入图片描述
should 的作用相当于 or
在这里插入图片描述
must_not 相当于 not
在这里插入图片描述
filter 过滤(gt:大于 lt:小于 gte:大于等于)
在这里插入图片描述
匹配多个条件
在这里插入图片描述
精确查询
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
精确查询多个值
在这里插入图片描述
高亮查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Springboot 集成 ElasticSearch

创建springboot项目,记得勾选
在这里插入图片描述
配置project环境
在这里插入图片描述
在这里插入图片描述
创建配置类
在这里插入图片描述

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1",9200,"http"))
        );
        return client;
    }
}

在这里插入图片描述
具体API测试
1.创建、获取、删除索引

/*
* es 7.6.1 高级客户端测试API
* */
@SpringBootTest
class EsApiApplicationTests {
	//面向对象操作

	@Autowired
	@Qualifier("restHighLevelClient") //名称不一致时 要用Qualifier
	private RestHighLevelClient client;

	//测试索引的创建 Request
	@Test
	void testCreateIndex() throws IOException {
		//1.创建索引请求
		CreateIndexRequest request = new CreateIndexRequest("kuang_index");

		//2.执行请求,请求后获得响应
		CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);

		System.out.println(createIndexResponse);
	}
	//测试获取索引 只能判断索引存不存在
	@Test
	void testExistIndex() throws IOException {
		GetIndexRequest getIndexRequest = new GetIndexRequest("kuang_index");
		boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
		System.out.println(exists);
	}


	//测试删除索引
	@Test
	void testDeleteIndex() throws IOException {
		DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("kuang_index");
		AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
		System.out.println(delete);
	}
}

2.文档操作

	//测试添加文档
    @Test
    void testDocument() throws IOException {
        //创建对象
        User user = new User("狂神说", 3);
        //创建请求
        IndexRequest request = new IndexRequest("kuang_index");

        //规则 put/kuang_index/_doc/1
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));

        //将数据放入请求 数据要转为json字符串 引入fastjson
        request.source(JSON.toJSONString(user), XContentType.JSON);

        //客户端发送请求,获取响应的结果
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());
    }

    //获取文档,判断是否存在 get /kuang_index/doc/1
    @Test
    void testIsExists() throws IOException {
        GetRequest getRequest = new GetRequest("kuang_index", "1");
        //不获取返回的_source 的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");

        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

    //获取文档的信息
    @Test
    void testGetDocument() throws IOException {
        GetRequest getRequest = new GetRequest("kuang_index", "1");
        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(getResponse.getSourceAsString()); //打印文档的内容
        System.out.println(getResponse);
    }

    //更新文档的信息
    @Test
    void testUpdateDocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");
        updateRequest.timeout("1s");

        User user = new User("你好", 5);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);

        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse.status());
    }

    //删除文档记录
    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("kuang_index", "1");
        request.timeout("1s");
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());

    }

    //特殊的,真实的项目都会批量插入数据
    @Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList<Object> userList = new ArrayList<>();
        userList.add(new User("1",15));
        userList.add(new User("2",15));
        userList.add(new User("3",15));
        userList.add(new User("4",15));
        userList.add(new User("5",15));

        //批处理请求
        for (int i = 0; i < userList.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("kuang_index")
                    .id(""+(i+1)) //不用id会生成随机id
                    .source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulkResponse.hasFailures()); //是否失败 返回false没有失败
    }

    //查询
    @Test
    void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("kuang_index");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        //查询条件 使用QueryBuilders工具类实现
        //termQuery 精确匹配
        //TermQueryBuilder name = QueryBuilders.termQuery("name", "3");
        //匹配所有
        MatchAllQueryBuilder allQuery = QueryBuilders.matchAllQuery();
        sourceBuilder.query(allQuery);

        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        //sourceBuilder.from();
        //sourceBuilder.size();

        searchRequest.source(sourceBuilder);

        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("=========================");
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

实战

在这里插入图片描述

1.编写jsoup爬虫工具类,获取信息

public class HtmlParseUtil {
    public static void main(String[] args) throws IOException {
      new HtmlParseUtil().parseJD("vue").forEach(System.out::println);
    }

    public List<Content> parseJD(String keywords) throws IOException {
        //获取请求 https://search.jd.com/Search?keyword=java
        String url="https://search.jd.com/Search?keyword="+keywords;
        //解析网页(Jsoup返回Document就是浏览器Document对象)
        Document document = Jsoup.parse(new URL(url), 30000);
        //所有js中可以使用的方法,这里都可以用
        Element element = document.getElementById("J_goodsList");
        //System.out.println(element.html());
        //获取所有的li元素
        Elements li = element.getElementsByTag("li");

        ArrayList<Content> goodsList = new ArrayList<>();

        //获取元素中的内容
        for (Element el : li) {
            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();
//            System.out.println("=========================");
//            System.out.println(img);
//            System.out.println(price);
//            System.out.println(title);
            Content content = new Content();
            content.setImg(img);
            content.setPrice(price);
            content.setTitle(title);
            goodsList.add(content);
        }
        return goodsList;
    }
}

在这里插入图片描述

关键字高亮 在index前端页面修改此处
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值