elastic search 的简单使用

package com.example.demo3;

import com.example.pojo.Article;
import com.example.service.ArticleService;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.jupiter.api.Test;
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.query.*;

import java.util.ArrayList;

import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;

@SpringBootTest
class Demo3ApplicationTests {


    private static final String[] titles = {"行宫", "静夜思", "闺怨", "九月九日忆山东兄弟"};
    private static final String[] content = {"寥落古行宫,宫花寂寞红。\n" +
            "白头宫女在,闲坐说玄宗。", "床前明月光,疑是地上霜。\n" +
            "举头望明月,低头思故乡", "闺中少妇不知愁,春日凝妆上翠楼。\n" +
            "忽见陌头杨柳色,悔教夫婿觅封侯。", "独在异乡为异客,每逢佳节倍思亲。\n" +
            "遥知兄弟登高处,遍插茱萸少一人。"};

    @Autowired
    ElasticsearchTemplate et;

    @Test
    void findAll() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(matchAllQuery()).build();
        System.out.println(et.queryForList(searchQuery, Article.class));
        // System.out.println(p);

    }

    @Test
    public void findBy() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(matchQuery("", "")).build();
        System.out.println(et.queryForList(searchQuery, Article.class));
    }

    @Test
    public void add() {
        Article p = new Article().setTitle("上山").setContent("fuckkk");
        IndexQuery iq = new IndexQueryBuilder().withObject(p).build();
        et.index(iq);
    }

    /**
     * 批量插入古诗
     */
    @Test
    public void addList() {
        ArrayList<IndexQuery> list = new ArrayList<>();
        for (int i = 0; i < titles.length; ++i) {
            Article p = new Article().setTitle(titles[i]).setContent(content[i]);
            IndexQuery iq = new IndexQueryBuilder().withObject(p).build();
            list.add(iq);
        }
        et.bulkIndex(list);

    }

    @Test
    public void queryAll() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .build();
        System.out.println(et.queryForList(searchQuery, Article.class));
    }

    /**
     * title or content 包含 "上"
     */
    @Test
    public void findOr()
    {
        QueryBuilder p = QueryBuilders.
                boolQuery()
                .should(QueryBuilders.matchPhraseQuery("title","上"))
                .should(QueryBuilders.matchPhraseQuery("content","上"));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withFilter(p).build();
        System.out.println(et.queryForList(searchQuery, Article.class));


    }



 /**
     * title or content 包含 "上"
     * 分页查询
     */
    @Test
    public void findOrPage()
    {
        QueryBuilder p = QueryBuilders.
                boolQuery()
                .should(QueryBuilders.matchPhraseQuery("title","上"))
                .should(QueryBuilders.matchPhraseQuery("content","上"));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withFilter(p).build();
        // System.out.println(et.queryForList(searchQuery, Article.class));
        Pageable pageable = PageRequest.of(0,6);
        searchQuery.setPageable(pageable);
        Page page = et.queryForPage(searchQuery,Article.class);
        // System.out.println(page.getContent());
        page.getContent().forEach(System.out::println);
        System.out.println(page.getTotalElements());
    }





}

package com.example.pojo;

import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;

import java.io.Serializable;

/**
 * @Author lyr
 * @create 2020/1/20 0:12
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
// @Builder
@Document(indexName = "dev-index1",type = "article")
public class Article implements Serializable {
    @Field(index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")//指定查询字段,指定查询所用的分词算法
    private String title;
    @Field(index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")//指定查询字段,指定查询所用的分词算法
    private String content;




}

这里补充一下,存储的时候 尽量细粒度索引,查询的时候尽量粗粒度索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值