ElasticSearch入门学习

一、下载安装ElaticSearch

1、ElaticSearch下载地址

https://www.elastic.co/cn/downloads/elasticsearch

在这里插入图片描述

2、windows版本的安装方法

解压即用,解压后目录结构如下:
在这里插入图片描述

3、启动ElasticSearch

进入bin目录,点击elasticsearch.bat文件
在这里插入图片描述
在这里插入图片描述

4、解决跨域访问问题

进入config文件夹下,打开elaticsearch.yml文件,增加以下两项配置。在这里插入图片描述

二、下载安装ElasticSearch-head可视化插件

1、下载安装elaticsearch-head

下载地址:https://github.com/mobz/elasticsearch-head
在这里插入图片描述
在这里插入图片描述

2、进入可视化界面

地址: http://localhost:9100/
登录后连接elasticsearch:http://localhost:9200/
在这里插入图片描述

三、下载安装kibana

1、下载安装

下载地址:https://www.elastic.co/cn/downloads/kibana
在这里插入图片描述
解压即可用,在bin目录下点击kibana.bat启动
在这里插入图片描述
在这里插入图片描述

2、进入可视化界面

地址:http://localhost:5601
在这里插入图片描述

四、IK分词器插件

1、安装IK分词器

下载地址: https://github.com/medcl/elasticsearch-analysis-ik
下载好之后解压放到elasticsearch目录下的plugins文件夹下。如下图:
在这里插入图片描述
在这里插入图片描述

2、使用IK分词器

IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度划分!
对 “小狗狗叫麦兜” 进行拆分
ik_smart拆分结果如下:
在这里插入图片描述
ik_max_word拆分结果如下:
在这里插入图片描述

3、创建自己的分词字典

想要在拆分时,把“麦兜”两个字合成一个词。怎么做?
第一步:进入ik分词器插件目录的config文件夹下,新增字典“mydic.txt",并在字典中增加”麦兜“。
在这里插入图片描述
第二步:打开IKAnalyzer.cfg文件,将字典名称加入到配置文件中,如下图:
在这里插入图片描述
第三步:重启elasticsearch
在这里插入图片描述
第四步:查看分词效果
ik_smart算法分词效果
在这里插入图片描述
ik_max_word算法分词效果
在这里插入图片描述

五、Restful基础测试

1、创建一个索引

PUT /索引名/类型名/文档id
{请求体}
用kibana操作:
在这里插入图片描述
用elasticsearch-head查看:
在这里插入图片描述
elasticsearch索引数据类型有哪些?
字符串类型
text、keyword
数值类型
long,integer,short,byte,double,float,half float,scaled float
日期类型
date
布尔类型
boolean
二进制类型
binary
等等
单存的创建一个索引,并指定字段类型
在这里插入图片描述
可以通过GET请求获取索引的具体信息:
在这里插入图片描述
如果文档字段没有指定类型,es会默认给每个字段设置类型

2、删除索引

删除索引: DELETE 索引名称
删除索引下的单个文档: DELETE /索引名称/类型名称/id

六、文档操作

1、添加数据 PUT

PUT /renyao/user/2
{
  "name": "张三",
  "age": 18,
  "desc": "法外狂徒",
  "tags":["旅游","赌博","帅气"]
}

在这里插入图片描述

2、获取数据 GET

GET /renyao/user/1

在这里插入图片描述

3、更新数据 PUT或POST

put来修改整条数据,如下图:
在这里插入图片描述
POST /xxx/xxx/xxx/_update可以修改某个文档的单个字段,
在这里插入图片描述

4、查询数据 GET search

(1)单个条件查询

GET /索引/类型/_search?q=key:value,如下所示, value值是模糊查询
在这里插入图片描述
查询结果中有个score值,这个是匹配度,值越大匹配度越高。

GET /renyao/user/_search
{
  "query" :{
    "match": {
      "name": "刘"
    }
  }
}

在这里插入图片描述

(2)查询结果过滤字段
GET /renyao/user/_search
{
  "query" :{
    "match": {
      "name": "刘"
    }
  }
}

在这里插入图片描述

(3)查询结果排序
GET /renyao/user/_search
{
  "query" :{
    "match": {
      "name": "刘"
    }
  },
  "_source": ["name","age"],
  "sort":[
      {
        "age" : {
          "order": "asc"
        }
      }
    ]
}

在这里插入图片描述

(4)查询结果限制条数
GET /renyao/user/_search
{
  "query" :{
    "match": {
      "name": "刘"
    }
  },
  "_source": ["name","age"],
  "sort":[
      {
        "age" : {
          "order": "asc"
        }
      }
    ],
    "from":2,  //从查询结果的第2条开始
    "size": 2  //限制只要2条数据,即查询结果的第3到第4条数据
}

在这里插入图片描述

(5)多条件查询

must相当于(and)
should相当于(or)
must_not相当于(not)

GET /renyao/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "刘"
          }
        },
        {
          "match": {
            "age": 16
          }
        }
      ]
    }
  }
}

在这里插入图片描述

(6)查询过滤
GET /renyao/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "刘"
          }
        }
      ],
      "filter": {
          "range": {
            "age": {
              "gt": 20
            }
          }
      }
    }
  }
}

gt大于,lt小于,gte大于等于,lte小于等于。
在这里插入图片描述
在这里插入图片描述

(7)精确查询
  • term,精确查询
  • match,模糊查询,会使用分词解析器!
    text数据类型会被分词器解析,keyword类型不会被分词器解析。
    创建一个索引:
PUT /kuangshen
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"   //text类型字段
      },
      "desc": {
        "type": "keyword"  //keyword类型字段
      }
    }
  }
}

插入两条数据:
在这里插入图片描述
term查询name字段(text类型)
在这里插入图片描述

term查询desc字段(keyword类型)
在这里插入图片描述
多个值精确匹配
在这里插入图片描述

(8)高亮查询
GET kuangshen/_search
{
  "query":{
    "match": {
      "name": "麦兜"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述
可以自定义高亮标签:

GET kuangshen/_search
{
  "query":{
    "match": {
      "name": "麦兜"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style = 'color:red'", //高亮标签前缀
    "post_tags": "</p>", //高亮标签后缀
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

七、springboot与elasticsearch结合

官网查找javaAPI
在这里插入图片描述
依赖:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
    <version>7.12.1</version>
</dependency>

整合springboot步骤:

1、创建配置类

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

2、测试API

(1)创建索引
@SpringBootTest
class ElasticsearchApplicationTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Test
    void testAPI() throws IOException {
        //1、创建索引请求 Request
        CreateIndexRequest kuang_index = new CreateIndexRequest("kuang_index");
        //2、执行创建请求
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(kuang_index, RequestOptions.DEFAULT);
    }
}
(2)获取索引
    @Test
    void testGetIndex() throws IOException {
        GetIndexRequest kuang_index = new GetIndexRequest("kuang_index");
        boolean exists = restHighLevelClient.indices().exists(kuang_index, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
(3)删除索引
    @Test
    void testDeleteIndex() throws IOException {
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("kuang_index");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }
(4)添加文档
    @Test
    void testAddDoc() throws IOException {
        User user = new User("javaTest1",3);
        //创建请求
        IndexRequest indexRequest = new IndexRequest("kuang_index");

        //规则 put /indexRequest/_doc/1
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.timeout("1s");
        //放入数据
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
        //客户端发送请求
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());
    }
(5)判断索引中某个文档是否存在
    @Test
    void testIsExistDoc() throws IOException {
        GetRequest getRequest = new GetRequest("kuang_index", "1");
        // 不获取返回的 _source 的上下文
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");

        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
(6)获取索引中某个文档的内容
    @Test
    void testGetDoc() throws IOException {
        GetRequest getRequest = new GetRequest("kuang_index", "1");
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);

        System.out.println(documentFields.getSourceAsString());
        System.out.println(documentFields);//返回的内容和命令返回一样
    }
(7)更新索引中的某个文档的内容
    @Test
    void testUpdateDoc() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("kuang_index","1");
        updateRequest.timeout("1s");

        User user = new User("狂神说java",23);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);

        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);

        System.out.println(updateResponse.status());
    }
(8)删除索引中的某个文档
    @Test
    void testDeleteDoc() throws IOException {
        DeleteRequest request = new DeleteRequest("kuang_index","2");
        request.timeout("1s");

        DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }
(9)查询索引中的文档
    @Test
    void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("kuang_index");
        //构建查询条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","java");
        //MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "java");
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

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

        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
        
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于学习Elasticsearch,你可以按照以下步骤进行: 1. 首先,你可以从Docker Hub上获取Elasticsearch的镜像。你可以使用以下命令来拉取特定版本的Elasticsearch镜像: ``` docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.2 ``` 2. 接下来,你可以创建一个简单的Dockerfile来构建一个Elasticsearch容器。Dockerfile的内容可以参考以下示例: ``` FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2 COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/ ``` 这个Dockerfile会将你的自定义配置文件`elasticsearch.yml`复制到Elasticsearch容***-analysis-ik`项目。该项目提供了一个支持中文分词的插件,你可以在以下链接找到它: ``` https://github.com/medcl/elasticsearch-analysis-ik ``` 你可以根据项目的文档和示例,自定义和配置分词器和分析器以满足你的需求。 通过上述步骤,你可以开始学习和使用Elasticsearch,并根据需要进行自定义配置和扩展。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ES(Elasticsearch)入门学习教程](https://blog.csdn.net/m0_55070913/article/details/124243790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ElasticSearch学习总结(基础篇,可学习,可复习)](https://blog.csdn.net/Gaowumao/article/details/124484971)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值