wildcard查询

通配符查询允许我们在查询值中使用*和?等通配符。此外,通配符查询跟词条查询在内容方面非常类似。可以发送一下查询,来匹配所有包含cr?me词条的文档,这里?表示任意字符:

{"query" : {"wildcard" : {"title" : "cr?me"}}
}

这将匹配title字段中包含与cr?me匹配的词条的所有文档。然后,还可以在通配符查询中包含加权属性;它将影响每个与给定值匹配的词条的重要性。如果要改变之前的查询,给它一个20.0的加权,可以发出以下查询:

{"query" : {"wildcard" : {"title" : {"value" : "cr?me","boost" : 20.0}}}
}

注意,通配符查询不太注重性能,在可能时应尽量避免,特别是要避免前缀通配符(以通配符开始的词条)。此外,请注意Elasticsearch会重写通配符查询,因此Elasticsearch允许通过一个额外的参数控制重写方法。

代码实现:
GET goods/_search
{"query" : {"wildcard" : {"brandName" : {"value" : "华*",}}}
}
java代码
/*** 模糊查询:WildcardQuery*/
@Test
public void testWildcardQuery() throws IOException {// 构建查询请求对象,指定查询的索引名称SearchRequest searchRequest = new SearchRequest("goods");// 创建查询条件构建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查询条件WildcardQueryBuilder query = QueryBuilders.wildcardQuery("title", "华*");// 指定查询条件sourceBulider.query(query);// 添加查询条件构建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查询,获取查询结果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 获取命中对象 SearchHitsSearchHits searchHits = searchResponse.getHits();//获取记录数long value = searchHits.getTotalHits().value;System.out.println("总记录数:"+value);List<Goods> goodsList = new ArrayList<>();// 获取Hits数据  数组SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {// 获取json字符串格式的数据String sourceAsString = hit.getSourceAsString();//转为javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);}
}

regexp查询

通过正则表达式查询,可以使用正则表达式来查询文本。请记住,此类查询的性能取决于所选的正则表达式。如果我们的正则表达式匹配许多词条,查询将很慢。一般规则是,正则表达式匹配的词条数越高,查询越慢。
正则表达式查询示例如下所示:

{"query" : {"regexp" : {"title" : {"value" : "cr.m[ae]","boost" : 10.0}}}
}

上述查询将被Elasticsearch重写成若干个词条查询,根据索引中匹配给定正则表达式的内容。查询中加权参数指定了生成的查询将使用的加权值。

代码实现:
GET goods/_search
{"query" : {"regexp" : {"title" : {"value" : "\\w+(.)*",}}}
}
java代码
/*** 模糊查询:regexpQuery*/
@Test
public void testRegexpQuery() throws IOException {// 构建查询请求对象,指定查询的索引名称SearchRequest searchRequest = new SearchRequest("goods");// 创建查询条件构建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查询条件RegexpQueryBuilder query = QueryBuilders.regexpQuery("title", "\\w+(.)*");// 指定查询条件sourceBulider.query(query);// 添加查询条件构建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查询,获取查询结果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 获取命中对象 SearchHitsSearchHits searchHits = searchResponse.getHits();//获取记录数long value = searchHits.getTotalHits().value;System.out.println("总记录数:"+value);List<Goods> goodsList = new ArrayList<>();// 获取Hits数据  数组SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {// 获取json字符串格式的数据String sourceAsString = hit.getSourceAsString();// 转为javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);}
}

prefix查询

前缀查询在配置方面来说跟词条查询类似。前缀查询能让我们匹配这样的文档:它们的特定字段以给定的前缀开始。例如,想找到所有title字段以cri开始的文档,可以运行以下查询:

{"query" : {"prefix" : {"title" : "cri"}}
}

与词条查询类似,还可以在前缀查询中包含加权属性;这将影响到给定前缀的重要性。例如,改变之前的查询,并给它增加3.0的加权,发出以下查询:

{"query" : {"prefix" : {"title" : {"value" : "cri","boost" : 3.0}}}
}

Elasticsearch会把前缀查询重写,也允许我们传递额外的参数来控制重写方法。

代码实现:
GET goods/_search
{"query" : {"prefix" : {"title" : {"value" : "华",}}}
}
java代码
/*** 模糊查询:perfixQuery*/
@Test
public void testPrefixQuery() throws IOException {// 构建查询请求对象,指定查询的索引名称SearchRequest searchRequest = new SearchRequest("goods");// 创建查询条件构建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查询条件PrefixQueryBuilder query = QueryBuilders.prefixQuery("brandName", "三");// 指定查询条件sourceBulider.query(query);// 添加查询条件构建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查询,获取查询结果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 获取命中对象 SearchHitsSearchHits searchHits = searchResponse.getHits();//获取记录数long value = searchHits.getTotalHits().value;System.out.println("总记录数:"+value);List<Goods> goodsList = new ArrayList<>();// 获取Hits数据  数组SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {//获取json字符串格式的数据String sourceAsString = hit.getSourceAsString();//转为javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);}
}

【全文搜索引擎】Elasticsearch之模糊查询相关推荐

  1. 全文搜索引擎----ElasticSearch和Solr

    全文搜索引擎 ElasticSearch 还是 Solr? 最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量 ...

  2. 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)

    关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...

  3. 全文搜索引擎 Elasticsearch 入门概念

    基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...

  4. es java 模糊查询_java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

  5. Java分词工具模糊查询_Java如何使用elasticsearch进行模糊查询

    这篇文章主要介绍了java如何使用elasticsearch进行模糊查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用环境上篇文章本人已书写过 ...

  6. 用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询...

    用PostgreSQL 做实时高效 搜索引擎 - 全文检索.模糊查询.正则查询.相似查询.ADHOC查询 作者 digoal 日期 2017-12-05 标签 PostgreSQL , 搜索引擎 , ...

  7. 全文搜索引擎Elasticsearch,这篇文章给讲透了

    之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的 ...

  8. 2万字详解,彻底讲透 全文搜索引擎 Elasticsearch

    来源:cnblogs.com/jajian/p/11223992.html 由于近期在公司内部做了一次 Elasticsearch 的分享,所以本篇主要是做一个总结,希望通过这篇文章能让读者大致了解 ...

  9. 全文搜索引擎ElasticSearch

    什么是ElasticSearch? Elasticsearch和Redis, Mysql一样,不仅服务于Java语言,其它语言也可以使用, 它的功能也类似一个数据库,能高效的从大量数据中搜索匹配指定关 ...

最新文章

  1. 排序算法 JavaScript
  2. zabbix服务器没有.pid文件,PID file /run/zabbix/zabbix_server.pid not readable (yet?) after start. 报错解决...
  3. mybatis配置时出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
  4. inline函数学习笔记
  5. mac或者linux磁力下载方法:远离渣雷
  6. php 单例模式 单态模式
  7. 【java笔记】线程池的介绍和使用
  8. Android使用Sugar ORM创建数据库报no such table:...的解决方法
  9. .net 怎么在控制器action中返回一个试图_ASP.NET Core MVC/WebAPI中另辟蹊径的全局统一异常处理方式...
  10. 用axure整理,体检软件-----第一天
  11. java习题5参考练习及答案_JAVA练习题(第5章).ppt
  12. 百度网盘解析工具 利用IDM等工具提速下载
  13. EXCEL workbook.saveas 函数详解
  14. python第二版课后答案第七章7.5_IDA7.5 启动基础配置
  15. repeated pB
  16. 获取微信视频号视频地址
  17. 黑苹果睡眠唤醒usb失灵_黑苹果解决USB3.0驱动问题
  18. 喜报!中国工商银行长春分行荣获吉林省“巾帼建功”先进集体称号
  19. 编写程序实现以下功能:计算1~n之间的素数并输出
  20. 用Python实现斯皮尔曼等级相关性检验

热门文章

  1. sublime text 心得
  2. 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码)
  3. 区别于2.4g 4.33的780m无线模块
  4. php api数据,php API查询数据
  5. asp.net使用for循环实现Datalist的分列显示功能
  6. MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
  7. Android IOC模块,利用了Java反射和Java注解
  8. golang中的优雅中止
  9. Python 数据结构视频教程三
  10. linux下/proc/cpuinfo文件