springboot elasticsearch

elasticsearch首先人家是一个搜索引擎,性能很好。

springboot集成elasticsearch,maven引入pom.xml

        <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna</artifactId>
			<scope>runtime</scope>
		</dependency>

 

application.properties

spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=localhost:9300

 

有两种方法,一种是基于spring data Repository,一种是ElasticsearchTemplate。

第一种demo:

定义Repository

package com.example.demo;

import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Document(indexName = "test1",type = "test2")
public class test implements Serializable {

    @Field()
    private int id;

    @Field(searchAnalyzer = "ik_smart",analyzer = "ik_smart")
    private String name;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

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

@Field(searchAnalyzer = "ik_smart",analyzer = "ik_smart")这个是设置中文分词查询的

比如说,我输入查找的词为大家好,会拆成大,家,好去查询

 

test

package com.example.demo;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.ResultsExtractor;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.querydsl.binding.QuerydslPredicateBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

	@Autowired
	TestRepository testRepository;

	@Autowired
	ElasticsearchTemplate elasticsearchTemplate;

	@Test
	public void contextLoads() {
		test t=new test();
		t.setId(3);
		t.setName("大鸡腿哦哦哦");
		testRepository.save(t);
	}

	@Test
	public void a(){
		Iterable<test> iterable=testRepository.findAll();
		for(test t:iterable){
			System.out.println(t.getId()+" "+t.getName());
		}
	}



}

run,然后在浏览器输入http://localhost:9200/test1/_search

{"took":232,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":3,"max_score":1.0,"hits":[{"_index":"test1","_type":"test2","_id":"2","_score":1.0,"_source":{"id":2,"name":"大家好啊 123"}},{"_index":"test1","_type":"test2","_id":"1","_score":1.0,"_source":{"id":1,"name":"dajitui"}},{"_index":"test1","_type":"test2","_id":"3","_score":1.0,"_source":{"id":3,"name":"大鸡腿哦哦哦"}}]}}

期间插入很多个,方便测试

 

第二种demo:

package com.example.demo;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.ResultsExtractor;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.querydsl.binding.QuerydslPredicateBuilder;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

	@Autowired
	TestRepository testRepository;

	@Autowired
	ElasticsearchTemplate elasticsearchTemplate;


	@Test
	public void b(){
		NativeSearchQueryBuilder queryBuilder=new NativeSearchQueryBuilder();
		queryBuilder.withIndices("test1");
		queryBuilder.withTypes("test2");
		String keyword="大";
		queryBuilder.withHighlightFields(new HighlightBuilder.Field("name").preTags("<font style='color:red;'>").postTags("</font>"));
		queryBuilder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name",keyword)));

		List<test> list=elasticsearchTemplate.query(queryBuilder.build(), new ResultsExtractor<List<test>>() {
			@Override
			public List<test> extract(SearchResponse searchResponse) {
				List<test> list=new ArrayList<test>();

				for(SearchHit hit:searchResponse.getHits()){
					test t=new test();
					t.setId(Integer.parseInt(hit.getId()));
					t.setName(hit.getHighlightFields().get("name").fragments()[0].toString());
					list.add(t);
				}
				return list;
			}
		});

		for(test t:list){
			System.out.println(t.toString());
		}


	}


}

执行结果:

test{id=2, name='<font style='color:red;'>大</font>家好啊 123'}
test{id=3, name='<font style='color:red;'>大</font>鸡腿哦哦哦'}

看到中文分词了吗,还有高亮

github:https://github.com/dajitui/springboot-elasticsearch

 

还有涉及到索引构造方式

可以使用mysql,或者mongodb的数据同步到elasticsearch,可以使用第三方工具

mysql:elasticsearch-jdbc

mongodb:mongo-connector

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值