IT人生

  • 首页
  • 归档
  • kafka
  • Java
  • Spring
  • Golang
  • SQL
  • Spark
  • ElasticSearch
  • 关于

  • 搜索
Phoenix HBase Kudu ElasticSearch Spring 数据结构 操作系统 Kettle Azkaban Sqoop Hive Yarn Redis Mybatis Impala Cloudera 大数据 HDFS mycat shell Linux 架构 并发 mysql sql golang java 工具 spark kafka 人生

在Spring中使用ElasticSearch

发表于 2018-05-04 | 分类于 ElasticSearch | 0 | 阅读次数 363

在Spring中调用ElasticSearch的服务有两种通用的方式:ElasticsearchRepository和ElasticsearchTemplate

ElasticsearchRepository

ElasticsearchRepository是比较简单的一种方式,但是功能有限,

  1. 定义Document
@Document(indexName = DemoDocument.INDEX, type = DemoDocument.TYPE)
public class DemoDocument {
    public static final String INDEX = "demo";
    public static final String TYPE = "content";

    @Id
    private String id;

    @Field(type = FieldType.Date)
    private Date publishTime;

    @Field(type = FieldType.keyword)
    private String authorId;

    @Field(type = FieldType.text)
    private String authorNickName;

    @Field(type = FieldType.text)
    private String authorAvatar;

    @Field(type = FieldType.keyword)
    private String referenceType;

    @Field(type = FieldType.text)
    private String referenceId;

    @Field(type = FieldType.keyword)
    private List<String> tags;

    @Field(type = FieldType.keyword)
    private List<String> channels;

    @Field(type = FieldType.text, searchAnalyzer = "standard", analyzer = "standard")
    private String title;

    @Field(type = FieldType.text, searchAnalyzer = "standard", analyzer = "standard")
    private String absContent;

    @Field(type = FieldType.text, searchAnalyzer = "standard", analyzer = "standard")
    private String content;

    @Field(type = FieldType.Integer)
    private int coverCount;

    @Field(type = FieldType.text)
    private List<String> coverImageList;

    @Field(type = FieldType.keyword)
    private String sortValue;

}
  1. 定义Repository
@Repository
public interface DemoContentRepository extends ElasticsearchRepository<DemoContentDocument, String> {
}
  1. 调用新增和删除
DemoContentDocument document = new DemoContentDocument();
document.setId(id);
.....
//修改和增加都是直接save
contentRepository.save(document);

//删除
if (contentRepository.existsById(id)) {
  contentRepository.deleteById(id);
}

ElasticsearchTemplate

  1. 按ID查询
Optional<DemoContentDocument> optionalDocument = demoContentRepository.findById(id);
if (!Optional.empty().equals(optionalDocument)) {
     document = optionalDocument.get();
}
  1. 字段=和in条件查询
Criteria criteria = new Criteria("referenceType").is(referenceType);
        criteria.and(new Criteria("referenceId").in(refIdList));
        CriteriaQuery criteriaQuery = new CriteriaQuery(criteria) ;
        List<DemoContentDocument> contentDocumentList = elasticsearchTemplate.queryForList(criteriaQuery, DemoContentDocument.class);
  1. 分页和orderBy查询
Criteria criteria = new Criteria("authorId").is(authorId);
CriteriaQuery criteriaQuery = new CriteriaQuery(criteria)
                .setPageable(new PageRequest(pageNum, pageSize))
                .addSort(new Sort(Sort.Direction.DESC, "sortValue"));
        Page<DemoContentDocument> contentDocumentPage = elasticsearchTemplate.queryForPage(criteriaQuery, DemoContentDocument.class);
  1. 按权重模糊搜索
 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 //搜索关键字
 if(StringUtils.isNotEmpty(keyWords)){
     MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyWords);
     //数字越大,权重越大
     queryBuilder.field("absContent",1);
     queryBuilder.field("content",2);
     queryBuilder.field("title",7);
     boolQueryBuilder.must(queryBuilder);
 }

SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withPageable(new PageRequest(pageNum, pageSize)).build();
Page<DemoContentDocument> contentDocumentPage = elasticsearchTemplate.queryForPage(searchQuery, DemoContentDocument.class);
  1. Sort字段
Criteria criteria = new Criteria("referenceType").in(referenceType);
CriteriaQuery criteriaQuery = new CriteriaQuery(criteria)
                    .setPageable(new PageRequest(0, pageSize))
                    .addSort(new Sort(Sort.Direction.DESC, "sortValue"));
resultList = elasticsearchTemplate.queryForList(criteriaQuery, DemoContentDocument.class);
  • 本文作者: Randy
  • 本文链接: http://www.itrensheng.com/archives/在Spring中使用ElasticSearch
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Phoenix # HBase # Kudu # ElasticSearch # Spring # 数据结构 # 操作系统 # Kettle # Azkaban # Sqoop # Hive # Yarn # Redis # Mybatis # Impala # Cloudera # 大数据 # HDFS # mycat # shell # Linux # 架构 # 并发 # mysql # sql # golang # java # 工具 # spark # kafka # 人生
分享一份Kudu中国大会PPT
ES indexing 性能优化
  • 文章目录
  • 站点概览
Randy

Randy

技术可以暂时落后,但任何时候都要有上进的信念

80 日志
27 分类
31 标签
RSS
Github E-mail
Creative Commons
© 2021 备案号:沪ICP备19020689号-1
Randy的个人网站