Elasticsearch:ElasticsearchTemplate初始化数据,计数,搜索和分页

ElasticsearchTemplate初始化数据,计数,搜索和分页

依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
实体类
import jdk.nashorn.internal.ir.annotations.Ignore;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@Document(indexName = "house_index",type = "house_type",shards = 1,replicas = 1)
public class ESHouse {
    @Id
    private String id;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String title;
    @Field(type=FieldType.Keyword,index = false)
    private String houseType;
    @Field(type=FieldType.Keyword,index = false)
    private String price;
    @Field(type=FieldType.Keyword,index = false)
    private String rentType;
    @Field(type=FieldType.Keyword,index = false)
    private String img;
    @Field(type=FieldType.Keyword)
    // 是jackson的注解,表示转换为json时,不包含该属性
    @Ignore
    private String city;
}

service
public interface ElasticService {
    boolean init();

    long count(String city,String keyword);

    List<ESHouse> selectByPage(String city,String keyword,int page,int size);
}
serviceImpl
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.*;
import org.springframework.stereotype.Service;


@Service
public class ElasticServiceImpl implements ElasticService {
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    @Autowired
    private HouseDao houseDao;
    @Override
    public boolean init() {
        try {
            boolean result = elasticsearchTemplate.createIndex(ESHouse.class);
            boolean result2 = elasticsearchTemplate.putMapping(ESHouse.class);
            if(result&&result2){
                List<House> list = houseDao.selectAll();
                List<IndexQuery> listBulk = new ArrayList<>();
                for(House house : list){
                    ESHouse esHouse = new ESHouse();
                    BeanUtils.copyProperties(house,esHouse);
                    esHouse.setImg(house.getImgs()[0]);
                    listBulk.add(new IndexQueryBuilder().withObject(esHouse).build());
                }
                elasticsearchTemplate.bulkIndex(listBulk);
                return true;
            }
        } catch (BeansException e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public long count(String city, String keyword) {
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        List<QueryBuilder> list= new ArrayList<>();
        // match phrase 对条件不拆词
        list.add(QueryBuilders.matchPhraseQuery("city",city));
        // match 对条件进行拆词
        list.add(QueryBuilders.matchQuery("title",keyword));
        boolQueryBuilder.must().addAll(list);
        SearchQuery searchQuery = new NativeSearchQuery(boolQueryBuilder);
        return elasticsearchTemplate.count(searchQuery,ESHouse.class);
    }

    @Override
    public List<ESHouse> selectByPage(String city, String keyword,int page,int size) {
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        List<QueryBuilder> list= new ArrayList<>();
        // match phrase 对条件不拆词
        list.add(QueryBuilders.matchPhraseQuery("city",city));
        // match 对条件进行拆词
        list.add(QueryBuilders.matchQuery("title",keyword));
        boolQueryBuilder.must().addAll(list);
        SearchQuery searchQuery = new NativeSearchQuery(boolQueryBuilder);
        searchQuery.setPageable(PageRequest.of(page,size));
        return elasticsearchTemplate.queryForList(searchQuery,ESHouse.class);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Java 中使用 ElasticsearchTemplate 可以通过以下步骤进行初始化自定义配置: 1. 创建一个 ElasticsearchTemplate 对象,并指定 Elasticsearch 客户端连接信息: ``` TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300)); ElasticsearchTemplate elasticsearchTemplate = new ElasticsearchTemplate(transportClient); ``` 2. 使用 ElasticsearchTemplate 对象执行查询操作: ``` SearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(matchQuery("title", "Spring Boot")) .build(); List<Article> articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); ``` 3. 如果需要自定义 ElasticsearchTemplate 的配置,可以在创建 ElasticsearchTemplate 对象时指定 ElasticsearchTemplateConfiguration 对象: ``` ElasticsearchTemplateConfiguration elasticsearchTemplateConfiguration = new ElasticsearchTemplateConfiguration(); elasticsearchTemplateConfiguration.setRefreshPolicy("wait_for"); ElasticsearchTemplate elasticsearchTemplate = new ElasticsearchTemplate(transportClient, elasticsearchTemplateConfiguration); ``` 在上面的例子中,我们设置了 ElasticsearchTemplate 的刷新策略为 "wait_for",表示在执行操作后等待 Elasticsearch 更新索引后再返回结果。 注意:在使用 ElasticsearchTemplate 时,需要保证 Elasticsearch 的版本与 ElasticsearchTemplate 的版本兼容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员无羡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值