版权声明:本文为非原创文章,出处: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. 微信企业号JS-SDK选择图片、上传图片

    因公司项目需要,要修改一个手机端上传图片的一个功能,原本的项目用的是input 的file控件上传的,虽然标注了可以多选,但是在实际运用当中只有iOS手机可以实现多选,Android手机并不支持多选, ...

  2. 简单的GIT上传

    简单的GIT上传 上传项目时先新建一个 文件夹 mkdir test 然后在切换到test文件夹中然后把github 中的项目拷贝下来 git glone url 然后git init 查看文件 然后 ...

  3. Mysql group by,order by,dinstict优化

    1.order by优化 2.group by优化 3.Dinstinct 优化 1.order by优化 实现方式: 1. 根据索引字段排序,利用索引取出的数据已经是排好序的,直接返回给客户端: 2 ...

  4. GIT 查看 删除 添加远程库

    查看远程库 $ git remote -vorigin https://github.com/autoliuweijie/MachineLearning.git (fetch)origin https ...

  5. Django使用模板后无法找到静态资源文件

    Django使用模板后无法找到静态资源文件 环境配置 Django版本1.11 python版本3.6.2 前言 在编写Django网站的时候,在涉及模板方面,一些简单的例子都没有问题,但这些例子都有 ...

  6. Ubuntu版本更替所引发的“血案”

    Ubuntu版本更替所引发的"血案"       今天,我兴致很高的装了双系统,并且配置了Linux的网络,接下来就是安装一些软件,来实现我想达到的功能了,结果被一个小小的命令卡的 ...

  7. Centos7 上安装配置 RabbitMQ

    前言:  最近服务器上搭建了一下rabbitmq, 网上找了很多教程, 采了灰常灰常多的坑. 现在终于从坑里面爬出来了.赶紧写下来,避免下次掉坑里面   好了,废话不多说,下面步入正题 一.安装Erl ...

  8. 【前端】Vue2全家桶案例《看漫画》之五、引入axios

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_5.html 项目github地址:https://github.com/shamoyuu/ ...

  9. JVM 指令

    1.Demo 2.Class 文件说明 2.1 Class文件结构 2.2 jvm type, method signature 2.3 泛型表示 3.方法说明 3.1 方法结构 3.1.1 Thre ...

  10. mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】

    注:文中所有的...代表多个. 1.使用count统计条数:select count(字段名...) from tablename; 2.使用avg计算字段的平均值:select avg(字段名) f ...