java使用elasticsearch进行模糊查询-已在项目中实际应用
java使用elasticsearch进行模糊查询
使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路,具体实现大家可以看后面文章,若其中有不适,请大家多多包涵
一、ES模糊查询
(一)不含中文模糊查询,适用于数字
SearchResponse searchResponse=null;
//连接elasticsearch
TransportClient transportClient = ESClientConnectionUtil.getESClientConnection();
searchResponse = client.prepareSearch()
.setIndices("knowledge")
.setTypes("knowledge_theme")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setScroll(TimeValue.timeValueMinutes(30)) //游标维持时间
.setSize(2 * 5)//实际返回的数量为10*index的主分片数
.setQuery(QueryBuilders.wildcardQuery("name", ("*"+name+"*").toLowerCase())) //查询的字段名及值
.execute()
.actionGet();
(二)ES中文条件查询:
// knowledge代表的是索引名称(相当于数据库名称),knowledge_theme代表的是类型(相当于数据库中的表名)
SearchRequestBuilder requestBuilder = client.prepareSearch("knowledge").setTypes("knowledge_theme");
// 声明where条件
BoolQueryBuilder qbs = QueryBuilders.boolQuery();
/**此处使用模糊匹配查询 类比数据库中 like name代表的是字段名,‘动态’代表的是匹配的关键字*/
//QueryBuilder 适用于单个字段查询(matchPhraseQuery是没有用分词起,matchQuery会使用分词器,将我们输入的值进行分割,如:“java动态”会分割成:“java”,“动态”)
QueryBuilder qb1 = QueryBuilders.matchPhraseQuery("name", "动态");
BoolQueryBuilder bqb1 = QueryBuilders.boolQuery().must(qb1);
qbs.must(bqb1);
requestBuilder.setQuery(qbs);
// /**
查询前10条数据 (此处是为了简单实现功能,才使用From,Size 进行分页查询,若数据量小可以使用,当数据量大时建议大家使用scroll方式进行分页,数据量大时From Size效率会越来越低,而scroll的效率是From Size的几倍)
*/
SearchResponse responses = requestBuilder.setFrom(0).setSize(10).execute().actionGet();
(三)模糊查询 ?匹配单个字符,*匹配多个字符
//搜索名字中含有jack文档(name中只要包含jack即可)
WildcardQueryBuilder queryBuilder =QueryBuilders.wildcardQuery("name","*jack*");
//搜索名字中含有_jack**的文档;如: wjacksss; ajackwww
WildcardQueryBuilder queryBuilder =QueryBuilders.wildcardQuery("name","?jack*");
(四)复合模糊查询must(相当于SQL中的and)
//模糊查询
WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery("name", "*jack*");
//搜索名字中含有jack的文档
WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery("interest", "*read*");
//搜索interest中含有read的文档
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//name中必须含有jack,interest中必须含有read,相当于and
boolQueryBuilder.must(queryBuilder1);
boolQueryBuilder.must(queryBuilder2);
(五)模糊查询 should(相当于SQL中的or关键字)
WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery("name", "*jack*");
//搜索名字中含有jack的文档
WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery("interest", "*read*");
//搜索interest中含有read的文档
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//name中含有jack或者interest含有read,相当于or
boolQueryBuilder.should(queryBuilder1);
boolQueryBuilder.should(queryBuilder2);
二、多个字段匹配一个值
//搜索name字段或interest字段中包含有cyb的数据,并且这两个字段中的值必须等于cyb
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("cyb","name", "interest");
具体每种查询在java代码中的实现大家可以关注下一篇博客
这篇博文我参照的是:https://blog.csdn.net/lom9357bye/article/details/52852533 ;该博主也写了许多总结方法;
java使用elasticsearch进行模糊查询-已在项目中实际应用的更多相关文章
- java使用elasticsearch进行模糊查询之must使用-项目中实际使用
java使用elasticsearch进行多个条件模糊查询 文章说明: 1.本篇文章,本人会从java连接elasticsearch到查询结果生成并映射到具体实体类(涵盖分页功能) 2.代码背景:el ...
- java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...
- java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)
1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...
- Java数据库学习之模糊查询(like )
Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...
- MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果
注:MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果: 如下所示: MySQL: select * from tableName where name li ...
- Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用
以下的操作环境为:jdk:1.8:elasticsearch:5.2.0 maven架包下载坐标为: <dependency> <groupId>org.elasticsear ...
- java操作elasticsearch实现聚合查询
1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...
- java之mybatis之模糊查询
1.在 mybatis 中,模糊查询可以有以下方式 (1).第一种,直接将封装好的条件传给 sql 语句 <select id="findByName" parameterT ...
- React-Native集成到已有项目中的总结
安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方V6.X.X版本或更高版本.安装完成后检测是否安装成功:node -v ...
随机推荐
- 使用Akka构建集群(一)
概述 Akka提供的非常吸引人的特性之一就是轻松构建自定义集群,这也是我要选择Akka的最基本原因之一.如果你不想敲太多代码,也可以通过简单的配置构建一个非常简单的集群.本文为说明Akka集群构建的学 ...
- js设计模式总结5
1.同步模块模式 随着页面功能的增加,系统的业务逻辑越来越复杂.多人开发的功能经常耦合在一起.有时分配任务给多人实现的时候,常常因为某一处功能耦合了很多人的代码,出现排队修改的现象,这很不利于团队开发 ...
- .36-浅析webpack源码之Parser类
眼看webpack4都出了,我还在撸3的源码,真的是捉急啊…… 不过现在只是beta版本,等出稳定版本后跑跑4的源码去. 之前漏了一个东西没有讲,如下: asyncLib.parallel([/**/ ...
- ASP.NET开发,从二层至三层,至面向对象 (5)
此是一系列博文,最后一篇了.也是面向初学者而作,望你们能有更好,更多对ASP.NET面向对编程了解与认识. 前一篇中<ASP.NET开发,从二层至三层,至面向对象 (4)>http://w ...
- 启用sa账号
第一部分: 如果在安装的时候选中的是Window身份验证,后来需要SQLServer身份验证登录,那么 一.先用window账号登录数据库 二.启用window身份验证和sql sever身份验证方式 ...
- JS去掉字符串前后空格或去掉所有空格的用法
1. 去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明 ...
- Fibonacci(矩阵)
Fibonacci Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Descrip ...
- POJ1236(KB9-A 强连通分量)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19326 Accepted: 75 ...
- 说说对npm的开发模式和生产模式的理解
nodejs这些年的发展非常快,相信没有哪个前端不知道的了,npm也成为了前端开发中经常用到了的一个命令.那么npm不是只用一个 "npm install xxx"命令就够了吗?实 ...
- js-ES6学习笔记-变量的解构赋值
1.ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 2.ES6允许写成:let [a,b,c] = [1,2,3];上面代码表示,可以从数 ...