ElasticSearchRepository


tags: ElasticSearch, java

ElasticSearchRepository

关键字介绍

term查询是直接通过倒排索引指定的词条进行查找的,所以,很显然,term查询效率肯定比match要高。

==term精确匹配==
代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词解析,直接对搜索词进行查找;

==match==
根据定义的分词器默认standar对搜索词进行拆分,根据拆分结果逐个进行匹配。特点是可以查出大量可能相关联的数据,但是准确率低。

==match_phrase==
短语匹配,同样会对搜索词拆分,但是所有拆分结果都必须包含,并且顺序一致,中间没有插入其他词语。特点是准确率高,但是最终匹配结果集较小。

==wildcard==
通配符模式的模糊匹配,使用简单,但是性能较慢。
支持以下2种通配符:

?,匹配一个字符
*,匹配零个或多个字符
官方建议:尽量避免在开头加通配符 ? 或者 *,这样会明显降低查询性能

ElasticSearchRepository基础方法

java配置文件

//端口配置
spring.elasticsearch.rest.uris= http://localhost:9200
//集群名称
spring.elasticsearch.rest.username= xy_elastic

接口需要继承ElasticSearchRepository

@Repository
public interface ItemRepository extends ElasticsearchRepository {

}

接口基础用法

实体类

@Data
@ToString
/*
 *indexName : 文档名称
 *shards: 分片数量,默认1
 */
@Document(indexName = "item", shards = 5)
public class Item implements Serializable {

    @Id
    private Long id;

    @Field(type = FieldType.Text , analyzer = "ik_max_word")
    private String title;

    @Field(type = FieldType.Long)
    private Long price;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date date;

}

ElasticSearchRepository已封装方法

@Autowired
private ItemRepository itemRepository;

//实体类
Item item = new Item();
item.setId(1L);
item.setTitle("ElasticSearch目前最新的已到7X");
item.setPrice(30000L);

//保存 或 更新
itemRepository.save(item);
//删除
itemRepository.deleteById(id);

/**
     * 通过id获取信息
     *
     * @param id id
     * @return {@link Item}
     */
public Item esGetInfoById(Long id){
     Optional item = itemRepository.findById(id);
         
     return  item.get();
}

ItemRepository自定义方法

/**
     * 获取页面项目
     *
     * @param keyWord  关键字
     * @param pageable 可分页
     * @return {@link Page}
     */
public Page getPageItems(String keyWord, Pageable pageable) {

    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();

    // 构建布尔查询
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    /**
     * must 多条件 &(并且)
     * mustNot 多条件 != (非)
     * should 多条件 || (或)
     */
     // 关键字查询
    boolQueryBuilder.must(QueryBuilders.matchQuery("title",keyWord));

    nativeSearchQueryBuilder.withQuery(boolQueryBuilder);
    nativeSearchQueryBuilder.withPageable(pageable);

    return itemRepository.search(nativeSearchQueryBuilder.build());
}

你可能感兴趣的:(ElasticSearchRepository)