springboot集成ES以及ES详细解读

6 篇文章 0 订阅
1 篇文章 0 订阅

Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。

一.  解读:

1.ES全文检索为什么能快速高效就是因为有倒排索引

     倒排索引会对文档内容进行关键词分词,可以使用关键词找到对应文档ID快读定位文档内容

     倒排索引就是相当于把关系型数据库的key(id)找value换成 value找key(id),利用分词器把value分成单个词语。

    如下图例:

2.节点和集群(Node & Cluster)

  ES配置文件关键配置

集群名称 cluster.name: myEs

节点名称 node.name: master

集群初始主节点名称 cluster.initial_master_nodes: ["master"]

一个ES一个节点,多个节点成一个集群,构成一个分布式数据库

3.储存结构

     索引名 对应数据库的 库名 (index)

    索引类型 对应数据库的 表名(document_type以及type)

      数据唯一索引 对应数据库 主键 (document_id)

4.并发安全问题

     进行版本控制的cas无锁机制(乐观锁)

   

5. 集群下的分片技术

        分片技术:将数据拆分在多台节点上存放

       集群好处:高可用 高容错性

参考博客

ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理_灰寨小学的python---小陈-CSDN博客

二. 安装及使用

  1.安装elasticsearch7.5,安装方法见百度

   2.安装kibana-7.5,安装方法见百度

  3.安装postpostman,安装方法见百度

   4.添加IK分词器,方法见百度

  5.安装以及配置logstash,安装方法见百度

  6.以上资源已上传到我的个人中心可快速下载。

 7.springboot集成

        第一步:pom.xml文件yin引包

       

    <!-- spring-boot-starter-data-elasticsearch -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
		<groupId>org.springframework.data</groupId>
				<artifactId>spring-data-commons</artifactId>
		</dependency>
     <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.39</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>

      <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>

      第二步:application.yml配置

spring.data.elasticsearch.cluster-name: myEs
#节点的地址 注意api模式下端口号是9300,千万不要写成9200(9200http端口9300tcp端口)
spring.data.elasticsearch.cluster-nodes: 192.168.9.7:9300
#spring.data.elasticsearch.repositories.enable: true

       第三步:建立实体映射

    

//注意这里indexName 和 type id必须对应ES中配置
@Data
@Document(indexName = "account", type = "operation_order", createIndex = false, useServerConfiguration = true)
public class AccOperationOrderEs implements Serializable {

	
	private static final long serialVersionUID = 1L;
	@Id
	private Integer id;
	
	private Long memberId;

    private String accountType;

    private String operationType;

    private String orderId;

    private String sysCode;

    private String sessionId;

    private Integer version;

    private String remark;

    private Date createTime;

    private BigDecimal amount;

    private String memberName;

    public Integer getId() {
        return id;
    }

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

    public Long getMemberId() {
        return memberId;
    }

    public void setMemberId(Long memberId) {
        this.memberId = memberId;
    }

    public String getAccountType() {
        return accountType;
    }

    public void setAccountType(String accountType) {
        this.accountType = accountType == null ? null : accountType.trim();
    }

    public String getOperationType() {
        return operationType;
    }

    public void setOperationType(String operationType) {
        this.operationType = operationType == null ? null : operationType.trim();
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId == null ? null : orderId.trim();
    }

    public String getSysCode() {
        return sysCode;
    }

    public void setSysCode(String sysCode) {
        this.sysCode = sysCode == null ? null : sysCode.trim();
    }

    public String getSessionId() {
        return sessionId;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId == null ? null : sessionId.trim();
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark == null ? null : remark.trim();
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public String getMemberName() {
        return memberName;
    }

    public void setMemberName(String memberName) {
        this.memberName = memberName == null ? null : memberName.trim();
    }
}

第四步:创建查询接口

@Component
public interface AccOperationOrderRepository extends  ElasticsearchRepository<OperationOrderEs,Integer>{
	
     //自动装配根据OrderId查询,参照此格式编写,下同
     public AccOperationOrderEs findByOrderId(String orderId);

	 public List<AccOperationOrderEs> findByMemberId(Long memberId);

第五步:创建service层

@Service
public class AccOperationOrderEsService {
	
	@Resource
	 private AccOperationOrderRepository  accOperationOrderRepository;
	
	 @Resource
	 private ElasticsearchTemplate elasticsearchTemplate;
	 
	 
	 
	 
	 
	 	/**
	     * 批量新增
	     **/
	    
	    public void batchAddAccOperationOrderEs(List<AccOperationOrderEs> accOperationOrderEs) {
	    	
		   if(accOperationOrderEs==null || accOperationOrderEs.size()==0) {
		      return ;
		   }
		   List<IndexQuery> queries = Lists.newArrayListWithExpectedSize(accOperationOrderEs.size());		  
		   IndexQuery indexItem  = null;
		   for(AccOperationOrderEs accOperationOrderE :accOperationOrderEs) {
		       indexItem = new IndexQuery();
		       indexItem.setObject(accOperationOrderE);
		       queries.add(indexItem);
		   }
		   elasticsearchTemplate.bulkIndex(queries);
	    }
	 
	    
	    /**
	     * 新增
	     * @param accOperationOrderEs
	     */
	    public void addAccOperationOrderEs(AccOperationOrderEs accOperationOrderEs) {
	    	accOperationOrderRepository.save(accOperationOrderEs);
	    }

	    /**
	     * 根据id删除
	     * @param id
	     */
	    public void deletedAccOperationOrderEsById(Integer id) {
	    	accOperationOrderRepository.deleteById(id);
	    }

	    
	    /**
	     * 修改
	     * @param accOperationOrders
	     */
	    public void updateAccOperationOrder(AccOperationOrderEs accOperationOrderEs) {
	 	   UpdateQuery updateQuery = new UpdateQuery();
	 	   updateQuery.setId(accOperationOrderEs.getOrderId());
	 	   updateQuery.setClazz(AccOperationOrderEs.class);
	 	  accOperationOrderEs.setId(null);
	 	   UpdateRequest request = new UpdateRequest();
	 	   request.doc(JsonUtil.objectToJsonString(accOperationOrderEs));
	 	   updateQuery.setUpdateRequest(request);
	 	   elasticsearchTemplate.update(updateQuery);
	     }

	    /**
	     * 查询所有
	     * @return
	     */
	    public List<AccOperationOrderEs>  queryAll(){
	    	Iterable<AccOperationOrderEs> all = accOperationOrderRepository.findAll();
	    	Iterator<AccOperationOrderEs> allAccOperationOrderEs = all.iterator();
	    	List<AccOperationOrderEs> accOperationOrderEsList= new ArrayList<AccOperationOrderEs>();
	    	while(allAccOperationOrderEs.hasNext()){
	    		accOperationOrderEsList.add(allAccOperationOrderEs.next());
	    	}
	    	return accOperationOrderEsList;
	    }
	    
	    /**
	     * 通过order_id查询
	     * @param order_id
	     * @return
	     */
	    public AccOperationOrderEs queryByorder_id(String orderId) {
		   return accOperationOrderRepository.findByOrderId(orderId);
	    }

	    /**
	     * 通过Member_id查询
	     * @param member_id
	     * @return
	     */
	    public List<AccOperationOrderEs> queryByMemberId(Long memberId) {
		   return accOperationOrderRepository.findByMemberId(memberId);
	    }

	    
	    
	    
	 
	

}

 第六步:创建contcontrol层   

第七步:核心启动类添加配置

@EnableAutoConfiguration
@MapperScan(basePackages ="com.pp.mappers")
@EnableElasticsearchRepositories(basePackages = "com.pp.dao")
@SpringBootApplication(scanBasePackages = {"com.pp"})
public class SearchApplication  extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(SearchApplication.class, args);
	}

	 private SpringApplicationBuilder config(SpringApplicationBuilder applicationBuilder){
	        return applicationBuilder.sources(SearchApplication.class);
	  }
	
	
	
	
}

  

      

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值