版权声明:本文为非原创文章,出处:http://blog.csdn.net/xiaohulunb/article/details/37877435

elasticsearch 分布式搜索系列专栏:http://blog.csdn.net/xiaohulunb/article/category/2399789

内容涉及代码GitHub地址: 点击打开链接

 

官方API:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html

 
 
 @NotSolved未解决
 
 
  1. package com.elasticsearch;
  2. import org.elasticsearch.action.ActionListener;
  3. import org.elasticsearch.action.search.SearchResponse;
  4. import org.elasticsearch.index.query.IndicesQueryBuilder;
  5. import org.elasticsearch.index.query.QueryBuilder;
  6. import org.elasticsearch.index.query.QueryBuilders;
  7. /**
  8. * Created by lw on 14-7-15.
  9. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10. * elasticsearch以提供了一个完整的Java查询dsl其余查询dsl。
  11. * QueryBuilders工厂构建
  12. * API:
  13. * <a>http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html</a>
  14. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  15. */
  16. public class Es_QueryBuilders_DSL {
  17. /**
  18. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  19. * match query 单个匹配
  20. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  21. */
  22. protected static QueryBuilder matchQuery() {
  23. return QueryBuilders.matchQuery("name", "葫芦4032娃");
  24. }
  25. /**
  26. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. * multimatch  query
  28. * 创建一个匹配查询的布尔型提供字段名称和文本。
  29. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  30. */
  31. protected static QueryBuilder multiMatchQuery() {
  32. //现住址和家乡在【山西省太原市7429街道】的人
  33. return QueryBuilders.multiMatchQuery(
  34. "山西省太原市7429街道",     // Text you are looking for
  35. "home", "now_home"       // Fields you query on
  36. );
  37. }
  38. /**
  39. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  40. * boolean query and 条件组合查询
  41. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  42. */
  43. protected static QueryBuilder booleanQuery() {
  44. return QueryBuilders
  45. .boolQuery()
  46. .must(QueryBuilders.termQuery("name", "葫芦3033娃"))
  47. .must(QueryBuilders.termQuery("home", "山西省太原市7967街道"))
  48. .mustNot(QueryBuilders.termQuery("isRealMen", false))
  49. .should(QueryBuilders.termQuery("now_home", "山西省太原市"));
  50. }
  51. /**
  52. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  53. * ids query
  54. * 构造一个只会匹配的特定数据 id 的查询。
  55. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  56. */
  57. protected static QueryBuilder idsQuery() {
  58. return QueryBuilders.idsQuery().ids("CHszwWRURyK08j01p0Mmug", "ojGrYKMEQCCPvh75lHJm3A");
  59. }
  60. /**
  61. * TODO NotSolved
  62. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  63. * constant score query
  64. * 另一个查询和查询,包裹查询只返回一个常数分数等于提高每个文档的查询。
  65. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  66. */
  67. protected static QueryBuilder constantScoreQuery() {
  68. /*return // Using with Filters
  69. QueryBuilders.constantScoreQuery(FilterBuilders.termFilter("name", "kimchy"))
  70. .boost(2.0f);*/
  71. // With Queries
  72. return QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "葫芦3033娃"))
  73. .boost(2.0f);
  74. }
  75. /**
  76. * TODO NotSolved
  77. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  78. * disjunction max query
  79. * 一个生成的子查询文件产生的联合查询,
  80. * 而且每个分数的文件具有最高得分文件的任何子查询产生的,
  81. * 再加上打破平手的增加任何额外的匹配的子查询。
  82. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  83. */
  84. protected static QueryBuilder disMaxQuery() {
  85. return QueryBuilders.disMaxQuery()
  86. .add(QueryBuilders.termQuery("name", "kimchy"))          // Your queries
  87. .add(QueryBuilders.termQuery("name", "elasticsearch"))   // Your queries
  88. .boost(1.2f)
  89. .tieBreaker(0.7f);
  90. }
  91. /**
  92. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  93. * fuzzy query
  94. * 使用模糊查询匹配文档查询。
  95. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  96. */
  97. protected static QueryBuilder fuzzyQuery() {
  98. return QueryBuilders.fuzzyQuery("name", "葫芦3582");
  99. }
  100. /**
  101. * TODO NotSolved
  102. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  103. * has child / has parent
  104. * 父或者子的文档查询
  105. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  106. */
  107. protected static QueryBuilder hasChildQuery() {
  108. return // Has Child
  109. QueryBuilders.hasChildQuery("blog_tag",
  110. QueryBuilders.termQuery("tag", "something"));
  111. // Has Parent
  112. /*return QueryBuilders.hasParentQuery("blog",
  113. QueryBuilders.termQuery("tag","something"));*/
  114. }
  115. /**
  116. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  117. * matchall query
  118. * 查询匹配所有文件。
  119. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  120. */
  121. protected static QueryBuilder matchAllQuery() {
  122. return QueryBuilders.matchAllQuery();
  123. }
  124. /**
  125. * TODO NotSolved
  126. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  127. * more like this (field) query (mlt and mlt_field)
  128. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  129. */
  130. protected static QueryBuilder moreLikeThisQuery() {
  131. // mlt Query
  132. QueryBuilders.moreLikeThisQuery("home", "now_home") // Fields
  133. .likeText("山西省太原市7429街道")                 // Text
  134. .minTermFreq(1)                                 // Ignore Threshold
  135. .maxQueryTerms(12);                             // Max num of Terms
  136. // in generated queries
  137. // mlt_field Query
  138. return QueryBuilders.moreLikeThisFieldQuery("home")              // Only on single field
  139. .likeText("山西省太原市7429街道")
  140. .minTermFreq(1)
  141. .maxQueryTerms(12);
  142. }
  143. /**
  144. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  145. * prefix query
  146. * 包含与查询相匹配的文档指定的前缀。
  147. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  148. */
  149. protected static QueryBuilder prefixQuery() {
  150. return QueryBuilders.prefixQuery("name", "葫芦31");
  151. }
  152. /**
  153. * TODO NotSolved
  154. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  155. * querystring query
  156. *   查询解析查询字符串,并运行它。有两种模式,这种经营。
  157. * 第一,当没有添加字段(使用{ @link QueryStringQueryBuilder #字段(String)},将运行查询一次,非字段前缀
  158. *   将使用{ @link QueryStringQueryBuilder # defaultField(字符串)}。
  159. * 第二,当一个或多个字段
  160. *   (使用{ @link QueryStringQueryBuilder #字段(字符串)}),将运行提供的解析查询字段,并结合
  161. *   他们使用DisMax或者一个普通的布尔查询(参见{ @link QueryStringQueryBuilder # useDisMax(布尔)})。
  162. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  163. */
  164. protected static QueryBuilder queryString() {
  165. return QueryBuilders.queryString("+kimchy -elasticsearch");
  166. }
  167. /**
  168. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  169. * range query
  170. * 查询相匹配的文档在一个范围。
  171. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  172. */
  173. protected static QueryBuilder rangeQuery() {
  174. return QueryBuilders
  175. .rangeQuery("name")
  176. .from("葫芦1000娃")
  177. .to("葫芦3000娃")
  178. .includeLower(true)     //包括下界
  179. .includeUpper(false); //包括上界
  180. }
  181. /**
  182. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  183. * span queries (first, near, not, or, term)
  184. * 跨度查询
  185. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  186. */
  187. protected static QueryBuilder spanQueries() {
  188. // Span First
  189. QueryBuilders.spanFirstQuery(
  190. QueryBuilders.spanTermQuery("name", "葫芦580娃"),  // Query
  191. 30000                                             // Max查询范围的结束位置
  192. );
  193. // Span Near TODO NotSolved
  194. QueryBuilders.spanNearQuery()
  195. .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃")) // Span Term Queries
  196. .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))
  197. .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"))
  198. .slop(30000)                                               // Slop factor
  199. .inOrder(false)
  200. .collectPayloads(false);
  201. // Span Not TODO NotSolved
  202. QueryBuilders.spanNotQuery()
  203. .include(QueryBuilders.spanTermQuery("name", "葫芦580娃"))
  204. .exclude(QueryBuilders.spanTermQuery("home", "山西省太原市2552街道"));
  205. // Span Or TODO NotSolved
  206. return QueryBuilders.spanOrQuery()
  207. .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃"))
  208. .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))
  209. .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"));
  210. // Span Term
  211. //return QueryBuilders.spanTermQuery("name", "葫芦580娃");
  212. }
  213. /**
  214. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  215. * term query
  216. * 一个查询相匹配的文件包含一个术语。。
  217. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  218. */
  219. protected static QueryBuilder termQuery() {
  220. return QueryBuilders.termQuery("name", "葫芦580娃");
  221. }
  222. /**
  223. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  224. * terms query
  225. * 一个查询相匹配的多个value
  226. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  227. */
  228. protected static QueryBuilder termsQuery() {
  229. return QueryBuilders.termsQuery("name", // field
  230. "葫芦580娃", "葫芦3812娃")                 // values
  231. .minimumMatch(1);               // 设置最小数量的匹配提供了条件。默认为1。
  232. }
  233. /**
  234. * TODO NotSolved
  235. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  236. * top children  query
  237. * 构建了一种新的评分的子查询,与子类型和运行在子文档查询。这个查询的结果是,那些子父文档文件匹配。
  238. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  239. */
  240. protected static QueryBuilder topChildrenQuery() {
  241. return QueryBuilders.topChildrenQuery(
  242. "blog_tag",                                 // field
  243. QueryBuilders.termQuery("name", "葫芦3812娃") // Query
  244. )
  245. .score("max")                               // max, sum or avg
  246. .factor(5)
  247. .incrementalFactor(2);
  248. }
  249. /**
  250. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  251. * wildcard query
  252. *   实现了通配符搜索查询。支持通配符* < /tt>,<tt>
  253. *   匹配任何字符序列(包括空),<tt> ? < /tt>,
  254. *   匹配任何单个的字符。注意该查询可以缓慢,因为它
  255. *   许多方面需要遍历。为了防止WildcardQueries极其缓慢。
  256. *   一个通配符词不应该从一个通配符* < /tt>或<tt>
  257. *   < /tt> <tt> ?。
  258. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  259. */
  260. protected static QueryBuilder wildcardQuery() {
  261. return QueryBuilders.wildcardQuery("name", "葫芦*2娃");
  262. }
  263. /**
  264. * TODO NotSolved
  265. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  266. * nested query
  267. * 嵌套查询
  268. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  269. */
  270. protected static QueryBuilder nestedQuery() {
  271. return QueryBuilders.nestedQuery("location",               // Path
  272. QueryBuilders.boolQuery()                      // Your query
  273. .must(QueryBuilders.matchQuery("location.lat", 0.962590433140581))
  274. .must(QueryBuilders.rangeQuery("location.lon").lt(0.00000000000000000003))
  275. )
  276. .scoreMode("total");                  // max, total, avg or none
  277. }
  278. /**
  279. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  280. * indices query
  281. * 索引查询
  282. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  283. */
  284. protected static IndicesQueryBuilder indicesQuery() {
  285. // Using another query when no match for the main one
  286. QueryBuilders.indicesQuery(
  287. QueryBuilders.termQuery("name", "葫芦3812娃"),
  288. Es_Utils.INDEX_DEMO_01, "index2"
  289. )       //设置查询索引上执行时使用不匹配指数
  290. .noMatchQuery(QueryBuilders.termQuery("age", "葫芦3812娃"));
  291. // Using all (match all) or none (match no documents)
  292. return QueryBuilders.indicesQuery(
  293. QueryBuilders.termQuery("name", "葫芦3812娃"),
  294. Es_Utils.INDEX_DEMO_01, "index2"
  295. )      // 设置不匹配查询,可以是 all 或者 none
  296. .noMatchQuery("none");
  297. }
  298. public static void main(String[] args) {
  299. Es_Utils.startupClient();
  300. try {
  301. searchTest(indicesQuery());
  302. } catch (Exception e) {
  303. e.printStackTrace();
  304. } finally {
  305. Es_Utils.shutDownClient();
  306. }
  307. }
  308. private static void searchTest(QueryBuilder queryBuilder) {
  309. //预准备执行搜索
  310. Es_Utils.client.prepareSearch(Es_Utils.INDEX_DEMO_01)
  311. .setTypes(Es_Utils.INDEX_DEMO_01_MAPPING)
  312. .setQuery(queryBuilder)
  313. .setFrom(0).setSize(20).setExplain(true)
  314. .execute()
  315. //注册监听事件
  316. .addListener(new ActionListener<SearchResponse>() {
  317. @Override
  318. public void onResponse(SearchResponse searchResponse) {
  319. Es_Utils.writeSearchResponse(searchResponse);
  320. }
  321. @Override
  322. public void onFailure(Throwable e) {
  323. }
  324. });
  325. }
  326. }

elasticsearch------java操作之QueryBuilders构建搜索Query的更多相关文章

  1. 【转载】Elasticsearch--java操作之QueryBuilders构建搜索Query

    原文地址:https://www.cnblogs.com/pypua/articles/9459941.html package com.elasticsearch; import org.elast ...

  2. elasticsearch__5__java操作之FilterBuilders构建过滤器Query

    FilterBuilders构建过滤器Query 代码如下: package com.elasticsearch; import org.elasticsearch.action.ActionList ...

  3. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg

    分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...

  4. java操作elasticsearch实现query String

    1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...

  5. 使用Java操作Elasticsearch(Elasticsearch的java api使用)

    1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...

  6. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  7. Elasticsearch笔记五之java操作es

    Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...

  8. 2 - 基于ELK的ElasticSearch 7.8.x技术整理 - java操作篇 - 更新完毕

    3.java操作ES篇 3.1.摸索java链接ES的流程 自行创建一个maven项目 3.1.1.依赖管理 点击查看代码 <properties> <ES-version>7 ...

  9. java操作elasticsearch实现组合桶聚合

    1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...

随机推荐

  1. Luogu P2419 [USACO08JAN]牛大赛Cow Contest

    题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...

  2. B+索引、Hash索引、数据类型长度

    1.为什么在数据库中要用B树索引而不是Hash索引? Mysql Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这 ...

  3. web前端开发工程师工资多少

      做web前端开发工程师工资高不高?下面千锋小编为大家分析一下:作为目前互联网行业中的主流技术,Web前端一直是占有重要的地位.尤其是近年来HTML5技术的突飞猛进,使Web前端技术有了更好的发展. ...

  4. NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)

    摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P8 -P11 CIPS2016> 中文信息处理报告下载链接:http://cips-uplo ...

  5. linux下在用户空间访问I/O端口的ioperm和iopl函数

    1.ioperm函数      功能描述:为调用进程设置I/O端口访问权能.ioperm的使用需要具有超级用户的权限,只有低端的[0-0x3ff] I/O端口可被设置,要想指定更多端口的权能,可使用i ...

  6. 基于DirectShow的MPEG-4视频传输系统的研究与实现

    1 引言     近年来,随着国民经济的发展,社会各个部门对于视频监视系统的需求越来越多.但目前的很多监视系统都跟具体的硬件相关,必须要具体的采集卡的支持才能实现.所以有必要开发一种具有通用性的视频监 ...

  7. Action调用Service

    Java Web项目,写到Action的时候,往往会要引入Service,这个是一个常见的操作. 但是,我自认为引入Service需要给它get和set方法,并且这个习惯已经沿用到现在.然而,自从参与 ...

  8. dedecms 使用自由列表实现首页列表分页

  9. R语言︱R社区的简单解析(CRAN、CRAN Task View)

    笔者寄语:菜鸟笔者一直觉得r CRAN离我们大家很远,在网上也很难找到这个社区的全解析教程,菜鸟我早上看到一篇文章提到了这个,于是抱着学渣学习的心态去看看这个社团的磅礴.威武. CRAN(The Co ...

  10. vxWorks内核实现基本原理

    内核实现基本原理     VxWorks 内核维护三个队列:tick队列.ready 队列.active 队列.另外还有一个队列涉及任务,即任务等待资源时所处的队列,这个队列可以是VxWorks内核提 ...