SpringMVC项目使用elastic search搜索

摘要:
根据项目要求,引入了弹性搜索(以下简称es)。稍后,我们将介绍es的本地安装和使用,以及java连接es查询的整个过程。1.创建和修改es索引字段,并在curl中添加新的索引字段。卷曲XPUT示例http://127.0.0.1:9200/idx_your_entity/_mapping/your_entity-H'内容类型:application/json'-H'帖子

项目需要,引入了elastic search(后续简称es),后面将介绍本地对es的安装,使用以及java连接es查询的整个过程。

1、es索引字段建立与修改,以curl新增一个索引字段示例

curl -X PUT 
  http://127.0.0.1:9200/idx_your_entity/_mapping/your_entity 
  -H 'Content-Type: application/json' 
  -H 'Postman-Token: 326dd921-4f7e-498b-866a-2de5173a908f' 
  -H 'cache-control: no-cache' 
  -d '{
    "properties": {
       "is_enable":{
            "type":"integer"
        }
    }
}

2、使用logstash向es里面增量推数据,需要有update_date字段

input {
    jdbc {
        jdbc_driver_library => "D:/logstash-6.7.1/lib/sqljdbc4.jar"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_connection_string => "jdbc:sqlserver://database_link;DatabaseName=HIM_bak;"
        jdbc_user => "username"
        jdbc_password => "password"
        schedule => "* * * * *"
        jdbc_default_timezone => "Asia/Shanghai"
		use_column_value => false
		tracking_column => "update_date"
        statement => "select 
			[fields you need] 
			from table WHERE update_date > :sql_last_value"
    }
}
output {
    elasticsearch {
        index => "idx_workhelp"
        document_type => "workhelp"
        document_id => "%{helpno}"
        hosts => ["127.0.0.1:9200"]
    }
}

3、es查询jar包,pom配置

<dependency>
    <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
    <version>6.7.1</version>
</dependency>

4、es数据源,查询client配置

@Bean
public TransportClient client() throws Exception {
    // init client
    TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), port);
    Settings settings = Settings.builder().put("cluster.name", nodeName).build();
    client = new PreBuiltTransportClient(settings);
    client.addTransportAddress(transportAddress);
    logger.info("use es and elastic search connect successful");
    return client;
}

5、es查询条件的构建:这里介绍两种查询条件的构建,must表示且,should表示或;同时用到了两种匹配方式:termQuery代表完全匹配,配合索引类型 keywords 使用,matchQuery代表模糊匹配,配合text使用。

 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 //示例 A=a and B like %b% and (C like %c% or D like %d%)
 boolQueryBuilder.filter(QueryBuilders.termQuery(fieldA, a));
 boolQueryBuilder.must(QueryBuilders.matchQuery(fieldB, b));
 boolQueryBuilder.must(
                    QueryBuilders.boolQuery()
                    .should(QueryBuilders.matchQuery(fieldC, c))
                    .should(QueryBuilders.matchQuery(fieldD, d)));

6、设置关键词高亮显示

highlightBuilder.preTags("<span class='highLight'>");
highlightBuilder.postTags("</span>");
highlightBuilder.field(field);

7、把条件带入并且执行查询,hits即查询结构,需要的数据类型SearchHits结构不复杂,这里不再赘叙。

SearchRequestBuilder searchRequestBuilder = client
    .prepareSearch(INDEX)
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(boolQueryBuilder);
searchRequestBuilder.highlighter(problemDescHiBuilder);
// 分页
searchRequestBuilder.setFrom(startIndex);
searchRequestBuilder.setSize(pageSize);
// 排序
searchRequestBuilder
    .addSort(SortBuilders.fieldSort(CREATEDATE))
    .addSort(SortBuilders.fieldSort(READCOUNT)
    .order(SortOrder.DESC));
SearchResponse response = searchRequestBuilder.get();
SearchHits hits = searchRequestBuilder.get().getHits();

8、查询结果。查询结果即对SearchHits进行处理,转化为自己项目的视图对象,一般为 业务实体VO 的命名方式进行表达,传到控制层。

9、最后:写到这里,大家有问题可以联系我共同学习探讨~

免责声明:文章转载自《SpringMVC项目使用elastic search搜索》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇创建SSIS包—ETL中典型的数据清洗随笔聊架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JDBC连接数据库及其执行操作

作者:Alvin 功能:数据库连接与实现增删改查 时间:2019年3月4日08点33分 参考文章:https://www.2cto.com/database/201805/743741.html 一、总结 数据库加载分为以下几个步骤 第一步、加载驱动 MySQL的加载方式 Class.forName("com.mysql.jdbc.Driver"); O...

使用logstash同步Mysql数据表到ES的一点感悟

针对单独一个数据表而言,大致可以分如下两种情况: 1.该数据表中有一个根据当前时间戳更新的字段,此时监控的是这个时间戳字段 具体可以看这个文章:https://www.cnblogs.com/sanduzxcvbnm/p/12858967.html 示例: modification_time就是表中要监控的时间戳字段 input { jdbc {...

MySql连接字符串的说明

MySql连接字符串的说明 下文对MySql连接字符串的相关参数及格式进行了详细的说明,供您参考,如果对您MySql连接字符串感兴趣的话,不妨一看。 mysql JDBC 驱动常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Drive...

springboot postgresql druid连接池和jpa,jdbctemplate执行sql查询

1.maven依赖配置(pom.xml) 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter</...

JDBC操纵数据库的步骤(以SQLServer为例)

JDBC的简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数...

jdbc 连接数据库

1.什么是jdbc? 答:jdbc是java data base connection 的简写,即java与数据库的连接,是java与数据库之间进行数据交互的工具,书上解释为java访问数据库的API。jdbc是一个轻量级的连接封装,适用于多种数据库,如:oracle、sql server,mysql等等。hibernate则是对jdbc的再封装。 2、j...