狂神ElasticSearch学习

ElasticSearch7.6入门学习笔记-KuangStudy-文章

启动闪退问题

解决:使用自带的jdk

在 elasticsearch-env.bat文件里面加一句

 set JAVA_HOME=D:/zuomian/elasticsearch-7.6.1/jdk

修改启动内存

 启动

 解决跨域问题

在elasticsearch.yml下添加

http.cors.enabled: true
http.cors.allow-origin: "*"

 启动elasticsearch-head-master

  1. cd elasticsearch-head
  2. # 安装依赖
  3. npm install
  4. # 启动
  5. npm run start
  6. # 访问
  7. http://localhost:9100/

 启动kibana

 1、使用kibana测试

ik_smart:最少切分

ik_max_word:最细粒度划分(穷尽词库的可能)

 

基本Rest命令说明:

methodurl地址描述
PUT(创建,修改)localhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POST(创建)localhost:9200/索引名称/类型名称创建文档(随机文档id)
POST(修改)localhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETE(删除)localhost:9200/索引名称/类型名称/文档id删除文档
GET(查询)localhost:9200/索引名称/类型名称/文档id查询文档通过文档ID
POST(查询)localhost:9200/索引名称/类型名称/文档id/_search查询所有数据

字段数据类型

  • 字符串类型
    • text、keyword
      • text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
      • keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
  • 数值型
    • long、Integer、short、byte、double、float、half floatscaled float
  • 日期类型
    • date
  • te布尔类型
    • boolean
  • 二进制类型
    • binary
  • 等等…

索引的基本操作

 创建一个索引,添加

put  /索引名/类型名/文档id

PUT /test1/type1/1       
{
  "name": "星晨",
  "age": 18
}

 3、指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /test2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}


PUT /xc/user/1
{
  "name": "星晨",
  "age": 18,
  "desc": "放弃不难,但坚持一定很酷!",
  "tags": ["技术宅","阳光","乐观"]
}

获取建立的规则

 修改索引

 POST /test3/_doc/1/_update
{
  "doc":{
    "name": "法外狂徒张三"
  }
}

 删除索引

DELETE test1

条件查询

GET xc/user/_search?q=name:星晨

构建查询(推荐使用)

 指定字段查询

GET xc/user/_search
{
  "query": {
    "match": {
      "name": "星晨"
    }
  },
  "_source": ["name","desc"]
}

 排序

 GET xc/user/_search
{
  "query": {
    "match": {
      "name": "星晨"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

 分页

GET xc/user/_search
{
  "query": {
    "match": {
      "name": "星晨"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

 多条件查询

must(and) 都需要满足否则查不到  where id=1 and age=xx

GET xc/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "星晨"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}

 should(or) 符合其中一个就能查出  where id=1 or age=18

GET xc/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "星晨"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}

GET xc/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": 18
          }
        },
        {
          "term": {
            "age": 21
          }
        }
      ]
    }
  }
}

must_not(not)

 过滤

GET xc/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "星晨"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }
  }
}

  

 匹配多个条件

 精确查询

  • term 直接通过 倒排索引 指定词条查询

GET xc/user/_search
{
  "query": {
    "term": {
      "tags": "男"
    }
  }
}

关于分词 

text和keyword

  • text:
    • 支持分词全文检索、支持模糊、精确查询,不支持聚合,排序操作;
    • text类型的最大支持的字符长度无限制,适合大字段存储;
  • keyword:
    • 不进行分词直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
    • keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果

 高亮

GET xc/user/_search
{
  "query": {
   "match": {
     "name": "星晨"
   }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

 自定义高亮

GET xc/user/_search
{
  "query": {
   "match": {
     "name": "星晨"
   }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 是一个基于 Lucene 的分布式搜索引擎,具有实时搜索、分布式、多租户、支持 RESTful Api 等特性。以下是狂神 Elasticsearch 相关代码的介绍。 1. 集成 Elasticsearch 在 Spring Boot 项目中,可以使用 Spring Data Elasticsearch 模块集成 Elasticsearch,只需要添加相关依赖和配置即可。具体代码示例如下: pom.xml 中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` application.yml 中添加配置: ```yaml spring: data: elasticsearch: cluster-nodes: http://localhost:9200 ``` 2. 创建索引、文档和搜索 在 Elasticsearch 中,索引相当于数据库,文档相当于表中的数据。可以使用 ElasticsearchTemplate 对象创建索引、文档,以及搜索数据,具体代码示例如下: ```java @Autowired private ElasticsearchTemplate elasticsearchTemplate; @Autowired private ElasticsearchRepository elasticsearchRepository; // 创建索引 elasticsearchTemplate.createIndex(User.class); // 创建文档 User user = new User(); user.setId(1L); user.setName("John"); user.setAge(20); elasticsearchTemplate.index(user); // 搜索数据 Iterable<User> users = elasticsearchRepository.findByName("John"); ``` 3. 自定义查询 可以根据具体业务需求,自定义查询条件,使用 ElasticsearchTemplate 对象进行查询,具体代码示例如下: ```java QueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("name", "John")) .mustNot(QueryBuilders.termQuery("age", 18)); SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(queryBuilder) .build(); List<User> users = elasticsearchTemplate.queryForList(searchQuery, User.class); ``` 以上是狂神 Elasticsearch 相关代码的简要介绍,具体用法建议查阅官方文档或相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值