博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-data-elasticsearch使用笔记
阅读量:5311 次
发布时间:2019-06-14

本文共 4553 字,大约阅读时间需要 15 分钟。

使用spring-data遇到了一些问题,记录一下。

spring-data-elasticsearch版本选择

这里有一份官方github上的spring-data-elasticsearch与elasticsearch的对应关系表,但是不太完整,但是还是比较有参考价值的

spring data elasticsearch elasticsearch
3.0.0.RC2 5.5.0
3.0.0.M4 5.4.0
2.0.4.RELEASE 2.4.0
2.0.0.RELEASE 2.2.0
1.4.0.M1 1.7.3
1.3.0.RELEASE 1.5.2
1.2.0.RELEASE 1.4.4
1.1.0.RELEASE 1.3.2
1.0.0.RELEASE 1.1.1

elasticsearch的客户端版本必须与服务端版本主版本保持一致。

参考:

The client must have the same major version (e.g. 2.x, or 5.x) as the nodes in the cluster. Clients may connect to clusters which have a different minor version (e.g. 2.3.x) but it is possible that new functionality may not be supported. Ideally, the client should have the same version as the cluster.

由于公司使用的elasticsearch 2.1.1,所以选择了spring-data-elasticsearch 2.1.7.RELEASE(2.1.7对应的原生客户端版本是elasticsearch 2.4.0,上面表格可能不完整)。

遇到异常java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation

原因是项目使用的springframework版本为4.1.6,而spring-data-elasticsearch 2.1.7默认依赖的spring-context是4.3.11,所以初步确定是我们的项目使用的spring版本太低导致。

参考,发现原来AnnotatedElementUtils.findMergedAnnotation是4.2版才有的(since 4.2)。

@Field日期类型

@Field(type = FieldType.Date,            index = FieldIndex.not_analyzed,            format = DateFormat.custom,            pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ")    private Date createTime;

@Document中动态indexName

配置Bean

@Component("esConfig")public class ESConfig {    @Value("${app.env}")    private String env;    public String getEnv() {        return env;    }    public void setEnv(String env) {        this.env = env;    }}

@Document注解

@Document(indexName = "index-#{esConfig.env}", type = "typename", shards = 4, replicas = 1)

安装ik插件

  1. 从官网下载es版本对应版本的ik插件,

  2. 我开发环境安装的es是2.4.1,一开始放在了D:\Program Files\下,结果加入ik插件后就启动不了了,原来是不支持带空格的路径,换了路径就好了。()

  3. 测试

    链接:http://localhost:9200/_analyze?analyzer=stardard&pretty=true&text=今天天气真好

    {  "tokens" : [ {    "token" : "今",    "start_offset" : 0,    "end_offset" : 1,    "type" : "
    ", "position" : 0 }, { "token" : "天", "start_offset" : 1, "end_offset" : 2, "type" : "
    ", "position" : 1 }, { "token" : "天", "start_offset" : 2, "end_offset" : 3, "type" : "
    ", "position" : 2 }, { "token" : "气", "start_offset" : 3, "end_offset" : 4, "type" : "
    ", "position" : 3 }, { "token" : "真", "start_offset" : 4, "end_offset" : 5, "type" : "
    ", "position" : 4 }, { "token" : "好", "start_offset" : 5, "end_offset" : 6, "type" : "
    ", "position" : 5 } ]}

    链接:http://localhost:9200/_analyze?analyzer=ik&pretty=true&text=今天天气真好

    {  "tokens" : [ {    "token" : "今天天气",    "start_offset" : 0,    "end_offset" : 4,    "type" : "CN_WORD",    "position" : 0  }, {    "token" : "今天",    "start_offset" : 0,    "end_offset" : 2,    "type" : "CN_WORD",    "position" : 1  }, {    "token" : "天天",    "start_offset" : 1,    "end_offset" : 3,    "type" : "CN_WORD",    "position" : 2  }, {    "token" : "天气",    "start_offset" : 2,    "end_offset" : 4,    "type" : "CN_WORD",    "position" : 3  }, {    "token" : "真好",    "start_offset" : 4,    "end_offset" : 6,    "type" : "CN_WORD",    "position" : 4  } ]}

head插件安装和使用

elasticsearch client api

or and

sql: select * from table where active=1 and ( name like '%?%' or code like '%?%' )elasticsearch 用java client怎么写呢?--------------------------------------QueryBuilder qb = QueryBuilders.boolQuery().must(new QueryStringQueryBuilder("1").field("active")).must(QueryBuilders.boolQuery()    .should(QueryBuilders.matchQuery("name", "小李子"))    .should(QueryBuilders.matchQuery("code", 小李子")));

in

sql: select * from table where name in ('tom', 'john');QueryBuilder qb = QueryBuilders.boolQuery()List
list = new ArrayList
();list.add("tom");list.add("john");BoolQueryBuilder in = QueryBuilders.boolQuery();for(String name : list) { in.shoud(QueryBuilders.matchPhraseQuery("name", name));}qb.must(in);

打印dsl日志

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder()                .withQuery(boolQueryBuilder);        builder.withPageable(new PageRequest(param.getPageNo(), 20))                .withSort(new FieldSortBuilder("updateTime").order(SortOrder.DESC));        SearchQuery searchQuery = builder.build();        logger.info("QueryDSL:\n{}", searchQuery.getQuery().toString());

转载于:https://www.cnblogs.com/liqipeng/p/7657854.html

你可能感兴趣的文章
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&语法
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>