springboot elasticsearch的用法

1.参考中文官网查看详细语法内容

点击去官网
入门级别的用法

2.mapping声明:

1.如果不声明字段的mapping,ES会自动根据类型自动的声明。
关于mapping的好文章
添加type的时候指定各个字段的类型

# 先删除原来的document
DELETE testDocument
# 然后添加新数据,设置mapping
PUT testDocument
{
  "mappings": {
    "article" : {
      "properties":
      {
        "title" : {"type": "text"} , 
        "author" : {"type": "text"} , 
        "titleScore" : {"type": "double"} 
        
      }
    }
  }
}
#  查询索引数据类型
get testDocument/article/_mapping

2.改变数据字段的类型:
ES是不允许你修改字段的类型,所以需要重新创建一个index库,然后拷贝数据

  • 第一步: 重新创建一个索引库document1, 失去精准的字段设置mapping
PUT document1
{
  "mappings": {
    "article" : {
      "properties":
      {
        "title" : {"type": "text"} , 
        "author" : {"type": "text"} , 
        "titleScore" : {"type": "double"} 
      }
    }
  }
}

  • 然后用reindex的命令, 将原始库的内容,拷给到document1中
POST _reindex
{
  "source": {
    "index": "document"
  },
  "dest": {
    "index": "document1"
  }
}

3.IK分词器的使用:

友情链接:https://www.cnblogs.com/haixiang/p/11810799.html
1.使用analyzer设置为ik_max_word

GET /_analyze
{
  "analyzer":"ik_max_word",
  "text":"我是一名架构师"
}

ik_max_word:细致的划分(索引数据时候使用 搜索文章之类的)
ik_smart:粗虐的划分(用户查询的时候 不用分很细的东西)

4.创建一个index以及type及其映射:

创建了一个index为test,表为jd的索引
title设置为ik中文分析器的ik_max_word
shopName设置为ik中文分析器的ik_smart

PUT /test/
{
  "mappings":{
    "jd": {
        "properties": {
            "id": {
                "type": "long"
            },
            "title": {
                "type": "text",
                "search_analyzer": "ik_max_word"
                "analyzer": "ik_max_word"
            },
            "image":{
              "type": "keyword"
            },
            "priceMin":{
              "type": "double"
            },
            "priceMax":{
              "type": "double"
            },
            "produceSrc":{
              "type": "keyword"
            },
            "shopName": {
                "type": "text",
                "analyzer": "ik_smart"
                "search_analyzer": "ik_smart"
            },
            "shopNameUri":{
              "type":"keyword"
            },
            "commitCount":{
              "type":"long"
            },
            "goodCount":{
              "type":"long"
            },
            "badCount":{
              "type":"long"
            }
        }
    }
  }
}

主要的映射 链接

字段类型概述
一级分类	二级分类	具体类型
核心类型	字符串类型	text(当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项)
				keyword(keyword类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过**精确值**搜索到。)
整数类型	integer,long,short,byte
浮点类型	double,float,half_float,scaled_float
逻辑类型	boolean
日期类型	date
范围类型	range
二进制类型	binary
复合类型	数组类型	array
对象类型	object
嵌套类型	nested
地理类型	地理坐标类型	geo_point
地理地图	geo_shape
特殊类型	IP类型	ip
范围类型	completion
令牌计数类型	token_count
附件类型	attachment
抽取类型	percolator

5.springboot使用elasticsearch

1.springboot有两种方式与elasticsearch交互

  1. 通过jest的方式,默认是不启动的
    1).首先创建springboot的项目,选中web以及nosql的elasticsearch
    2).因为使用的是是jest的方式,需要把elasticsearch依赖删除,导入jset依赖
    3).如果elasticsearch服务器不在本地,需要配置地址
#配置jest
spring:
  elasticsearch:
    jest:
      uris: http://192.168.0.113:9200

4).创建实体类

package com.wcy.elasticsearch.bean;

import io.searchbox.annotations.JestId;

import java.lang.annotation.Documented;


public class Empleyee {
    @JestId
    private Integer id;
    private String name;
    private String desc;

    public Empleyee() {

    }

    public Empleyee(Integer id, String name, String desc) {
        this.id = id;
        this.name = name;
        this.desc = desc;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

5).存入数据

    @Autowired
    JestClient jestClient;//引入jestClient
    //jest添加数据
    @Test
    void contextLoads() {
        Empleyee empleyee=new Empleyee(1,"王长印","喜欢游泳、上网、打游戏");
        Index index=new Index.Builder(empleyee).index("wangchangyin").type("empleyee").build();
        try {
            jestClient.execute(index);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

6).查找数据

    @Test
    public void SearchJest(){
        String json="{\n" +
                "    \"query\" : {\n" +
                "        \"match\" : {\n" +
                "            \"name\" : \"王长印\"\n" +
                "        }\n" +
                "    }\n" +
                "}";
        Search search=new Search.Builder(json).addIndex("wangchangyin").addType("empleyee").build();
        try {
            SearchResult execute = jestClient.execute(search);
            System.out.println(execute.getJsonString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

2. **通过springData elasticsearch的方式

**
1).引入springData elasticsearch依赖
2).配置elasticsearch

spring:
  #springData elasticsearch的方式
  data:
    elasticsearch:
      cluster-name: docker-cluster #默认为elasticsearch
      cluster-nodes: 192.168.0.113:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
      properties:
        path:
          logs: ./elasticsearch/log #elasticsearch日志存储目录
          data: ./elasticsearch/data #elasticsearch数据存储目录

3).实体类:

package com.wcy.elasticsearch.bean;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "bookindex",type = "book")
public class Book {
    private Integer id;
    private String name;
    private String author;

    public Book() {
    }

    public Book(Integer id, String name, String author) {
        this.id = id;
        this.name = name;
        this.author = author;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}

4).dao层 可以自定义查询方法

package com.wcy.elasticsearch.repository;

import com.wcy.elasticsearch.bean.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

/**
 * 与数据库的dao相似
 */
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
    public List<Book> findBookByName(String name);//自定义查询方式
}

5).添加数据

    @Autowired
    private BookRepository bookRepository;
    /**
     * springData elasticsearch的添加
     */
   @Test
    public void testSearch(){
        Book book=new Book(2,"Java从入门到秃头","小王");
        bookRepository.index(book);
    }

6).查询数据

    @Test
    public void testSearch2(){
       //查询方法一
/*        String queryString = "java";//搜索关键字
        QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString);
        Iterator<Book> iterator = bookRepository.search(builder).iterator();
        while (iterator.hasNext()){
            Book next = iterator.next();
            System.out.println(next);
        }*/

        //查询方法二
        List<Book> java = bookRepository.findBookByName("java");
        for (Book book:java){
            System.out.println(book);
        }

    }

3.elasticsearch的更多知识:

1.String的映射默认是全文索引,当然可以设置 index 属性

index 属性控制怎样索引字符串。它可以是下面三个值:
analyzed(默认) 首先分析字符串,然后索引它。换句话说,以全文索引这个域。
not_analyzed 索引这个域,所以它能够被搜索,但索引的是精确值。不会对它进行分析。
no 不索引这个域。这个域不会被搜索到。

如果想要String精准匹配 可以通过设置String的index为not_analyzed
2.String的分析器,我们可以使用内置的分析器

对于 analyzed 字符串域,用 analyzer 属性指定在搜索和索引时使用的分析器。默认, Elasticsearch 使用 standard 分析器, 但你可以指定一个内置的分析器替代它,例如 whitespace 、 simple 和 english:

列如字段tweet设置分析器为以英语分析

{
    "tweet": {
        "type":     "string",
        "analyzer": "english"
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch 简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。elasticSearch 的使用场景 1、在海量数据前提下,对数据进行检索。比如:京东,淘宝等电商项目课程目标: 1. 了解企业级搜索引擎2. 安装elasticsearch 课程目录: 01 课程介绍02 elasticsearch 简介03 elasticsearch 使用场景04 安装elasticsearch 之前先安装jdk05 安装elasticsearch06 测试elasticsearch是否安装成功 07 安装kibana08 elasticsearch 基本认识 以及添加索引和删除索引09 elasticsearch 添加查询数据10 elasticsearch 修改删除数据11 elasticsearch 有条件的查询12 分词子属性fuzzy查询13 elasticsearch 过滤使用14 elasticsearch 排序与分页15 elasticsearch 如何查询指定的字段16 elasticsearch 高亮显示17 elasticsearch 聚合18 elasticsearch mapping 概念19 elasticsearch 的中文词库20 elasticsearch 中文词库安装测试21 elasticsearch 中文词库的使用案例22 elasticsearch 自定义词库配置23 安装nginx 配置中文词库24 测试elasticsearch 自定义中文词库25 搭建项目父工程26 搭建项目bean-interface-common27 搭建search 的service web 项目28 测试项目是否能与elasticsearch联通29 创建数据库并搭建首页30 数据上传功能的实现类完成31 数据上传控制器完成32 dubbo 介绍以及安装zookeeper33 将数据从mysql 上传到elasticsearch 中34 elasticsearch查询功能分析35 编写业务需求的dsl 语句36 编写输入参数返回结果集的实体类37 实现类编写38 编写实现类中dsl 语句39 返回集结果转换40 结果测试41 测试通过输入查询条件并将数据显示到页面

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值