ElasticSearch系列3

Spring Data是一个用于数据库访问,并支持云服务的开源框架,其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA的写法。可以在几乎不用写实现的情况下,实现对数据的访问和操作,除了CRUD外,还包括分页。排序等一些常用的功能
官网:http://projects.spring.io/spring-data/
pom.xml

<dependency>
       <groupId>org.elasticsearch</groupId>
       <artifactId>elasticsearch</artifactId>
       <version>5.6.8</version>
   <dependency>
   <dependency>
       <groupId>org.elasticsearch.client</groupId>
       <artifactId>transport</artifactId>
       <version>5.6.8</version>
   <dependency>
   <denpendency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <articleId>jackson</articleId>
    <version>2.8.1</version>
</dependency>
<denpendency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <articleId>jackson-databind</articleId>
    <version>2.8.1</version>
</dependency>
<denpendency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <articleId>jackson-annotations</articleId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>3.0.5.RELEASE</version>
    <exclusions>
       <exclusion>
           <groupId>org.elasticsearch.plugin</groupId>
           <artifactId>transport-netty4-client</artifactId>
       <exclusion>
    <exclusions>
<dependency>
1.创建Entity类,pojo
@Document(indexName = "index_hello",type="article")#索引
@Data
public class Article{
    @ID
    @Field(type=FieldType.long,store = true)
    private long id;
    @Field(type=FieldType.text,store = true, analyzer = "ik_smart")
    private String title;
    @Field(type=FieldType.text,store = true, analyzer = "ik_smart")
    private String content;
}
2.创建一个Dao,是一个接口,需要继承ElasticSearchRepository接口
public interface ArticleRepository extends ElasticsearchRepository<Article,Long>{
}

SpringDataEs创建索引

public class SpringDataElasticSearchTest{
	@Autowired
	private ArticleRepository articleRepository;
	@Autowired
	private ElasticsearchTemplate template;
	public void createIndex(){
	    //创建索引,并配置映射关系
	    template.createIndex(Article.class);
	    //配置映射关系
	    template.putMapping(Article.class);
	}
	public void addDocument(){
	   Article article = new Article();
	   article.setId(1);
	   article.setTitle("我是程序员");
	   article.setContent("修改bug");
	   //把文档写入索引库
	   articleRepository.save(article);
	}
	public void deleteDocument(){
	   articleRepository.deleteById(1);//删除id为1的
	   articleRepository.deleteAll();//全部删除
	}
	public void updateDocument(){
	   Article article = new Article();
	   article.setId(1);
	   article.setTitle("我是程序员");
	   article.setContent("aaa");
	   //把文档写入索引库
	   articleRepository.save(article);
	}
	public void searchDocument(){
	   articleRepository.findAll();//返回所有的
	   articleRepository.findById(1);//查询id为1的
	}
	//自定义查询
public interface ArticleRepository extends ElasticsearchRepository<Article,Long>{
   List<Article> findByTitle(String title);//定义好即可 无需实现
   List<Article> findByTitleOrContent(String title, String content);
   List<Article> findByTitleOrContent(String title, String content,Pageable pageable);//设置分页
}
	public void findDocument(){
	   articleRepository.findByTitle("程序员");
	   articleRepository.findByTitleOrContent("程序员","a");//不分页默认是10条数据
	   #分词查询 分词与分词之间是and关系
	   Pageable pageable = PageRequest.of(0,5);
	   articleRepository.findByTitleOrContent("程序员","a");//这个时候就会分页
	}
}	

在这里插入图片描述
使用NativeSearchQuery 查询

1.创建一个NativeSearchQuery对象
    设置查询条件,QueryBuilder对象
 NativeSearchQueryBuilder query = new NativeSearchQueryBuilder()
     .withQuery(QueryBuilders.queryStringQuery("程序员").defaultField("title")) 
     //根据实际情况查询 分词关系是或
     .withPageable(PageRequest.of(0,10))//分页
     .build();  
2.使用ElasticSearchTemplate对象执行查询
List<Article> articleList = template.queryForList(query,Article.class);
3.取查询结果

分片参数设置:
https://blog.csdn.net/qq_38486203/article/details/80077844
number_of_shards:主分片数,默认为1

number_of_replicas:副本分片数,默认为1

可以在线修改副本分片数 number_of_replicas ,但主分片数 number_of_shards 不可以在线改

curl -XPUT 'http://localhost:9200/myindex/_settings' -H 'Content-Type: application/json' -d ' 
{
    "index" : {
        "number_of_replicas" : 0
    }
}

也可以在配置文件 elasticsearch.yml 中进行修改:

index.number_of_shards:

设置默认索引分片个数,默认为1片。索引分片对ES的查询性能有很大的影响,在应用环境,应该选择适合的分片大小。

index.number_of_replicas:

设置默认索引副本个数,默认为1个副本。此处的1个副本是指index.number_of_shards的一个完全拷贝;如果有5个主分片1个副本分片,即总分片数为10。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值