elasticsearch------java操作之QueryBuilders构建搜索Query
版权声明:本文为非原创文章,出处: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
- package com.elasticsearch;
- import org.elasticsearch.action.ActionListener;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.index.query.IndicesQueryBuilder;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- /**
- * Created by lw on 14-7-15.
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * elasticsearch以提供了一个完整的Java查询dsl其余查询dsl。
- * QueryBuilders工厂构建
- * API:
- * <a>http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/query-dsl-queries.html</a>
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- public class Es_QueryBuilders_DSL {
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * match query 单个匹配
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder matchQuery() {
- return QueryBuilders.matchQuery("name", "葫芦4032娃");
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * multimatch query
- * 创建一个匹配查询的布尔型提供字段名称和文本。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder multiMatchQuery() {
- //现住址和家乡在【山西省太原市7429街道】的人
- return QueryBuilders.multiMatchQuery(
- "山西省太原市7429街道", // Text you are looking for
- "home", "now_home" // Fields you query on
- );
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * boolean query and 条件组合查询
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder booleanQuery() {
- return QueryBuilders
- .boolQuery()
- .must(QueryBuilders.termQuery("name", "葫芦3033娃"))
- .must(QueryBuilders.termQuery("home", "山西省太原市7967街道"))
- .mustNot(QueryBuilders.termQuery("isRealMen", false))
- .should(QueryBuilders.termQuery("now_home", "山西省太原市"));
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * ids query
- * 构造一个只会匹配的特定数据 id 的查询。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder idsQuery() {
- return QueryBuilders.idsQuery().ids("CHszwWRURyK08j01p0Mmug", "ojGrYKMEQCCPvh75lHJm3A");
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * constant score query
- * 另一个查询和查询,包裹查询只返回一个常数分数等于提高每个文档的查询。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder constantScoreQuery() {
- /*return // Using with Filters
- QueryBuilders.constantScoreQuery(FilterBuilders.termFilter("name", "kimchy"))
- .boost(2.0f);*/
- // With Queries
- return QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "葫芦3033娃"))
- .boost(2.0f);
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * disjunction max query
- * 一个生成的子查询文件产生的联合查询,
- * 而且每个分数的文件具有最高得分文件的任何子查询产生的,
- * 再加上打破平手的增加任何额外的匹配的子查询。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder disMaxQuery() {
- return QueryBuilders.disMaxQuery()
- .add(QueryBuilders.termQuery("name", "kimchy")) // Your queries
- .add(QueryBuilders.termQuery("name", "elasticsearch")) // Your queries
- .boost(1.2f)
- .tieBreaker(0.7f);
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * fuzzy query
- * 使用模糊查询匹配文档查询。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder fuzzyQuery() {
- return QueryBuilders.fuzzyQuery("name", "葫芦3582");
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * has child / has parent
- * 父或者子的文档查询
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder hasChildQuery() {
- return // Has Child
- QueryBuilders.hasChildQuery("blog_tag",
- QueryBuilders.termQuery("tag", "something"));
- // Has Parent
- /*return QueryBuilders.hasParentQuery("blog",
- QueryBuilders.termQuery("tag","something"));*/
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * matchall query
- * 查询匹配所有文件。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder matchAllQuery() {
- return QueryBuilders.matchAllQuery();
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * more like this (field) query (mlt and mlt_field)
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder moreLikeThisQuery() {
- // mlt Query
- QueryBuilders.moreLikeThisQuery("home", "now_home") // Fields
- .likeText("山西省太原市7429街道") // Text
- .minTermFreq(1) // Ignore Threshold
- .maxQueryTerms(12); // Max num of Terms
- // in generated queries
- // mlt_field Query
- return QueryBuilders.moreLikeThisFieldQuery("home") // Only on single field
- .likeText("山西省太原市7429街道")
- .minTermFreq(1)
- .maxQueryTerms(12);
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * prefix query
- * 包含与查询相匹配的文档指定的前缀。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder prefixQuery() {
- return QueryBuilders.prefixQuery("name", "葫芦31");
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * querystring query
- * 查询解析查询字符串,并运行它。有两种模式,这种经营。
- * 第一,当没有添加字段(使用{ @link QueryStringQueryBuilder #字段(String)},将运行查询一次,非字段前缀
- * 将使用{ @link QueryStringQueryBuilder # defaultField(字符串)}。
- * 第二,当一个或多个字段
- * (使用{ @link QueryStringQueryBuilder #字段(字符串)}),将运行提供的解析查询字段,并结合
- * 他们使用DisMax或者一个普通的布尔查询(参见{ @link QueryStringQueryBuilder # useDisMax(布尔)})。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder queryString() {
- return QueryBuilders.queryString("+kimchy -elasticsearch");
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * range query
- * 查询相匹配的文档在一个范围。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder rangeQuery() {
- return QueryBuilders
- .rangeQuery("name")
- .from("葫芦1000娃")
- .to("葫芦3000娃")
- .includeLower(true) //包括下界
- .includeUpper(false); //包括上界
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * span queries (first, near, not, or, term)
- * 跨度查询
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder spanQueries() {
- // Span First
- QueryBuilders.spanFirstQuery(
- QueryBuilders.spanTermQuery("name", "葫芦580娃"), // Query
- 30000 // Max查询范围的结束位置
- );
- // Span Near TODO NotSolved
- QueryBuilders.spanNearQuery()
- .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃")) // Span Term Queries
- .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))
- .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"))
- .slop(30000) // Slop factor
- .inOrder(false)
- .collectPayloads(false);
- // Span Not TODO NotSolved
- QueryBuilders.spanNotQuery()
- .include(QueryBuilders.spanTermQuery("name", "葫芦580娃"))
- .exclude(QueryBuilders.spanTermQuery("home", "山西省太原市2552街道"));
- // Span Or TODO NotSolved
- return QueryBuilders.spanOrQuery()
- .clause(QueryBuilders.spanTermQuery("name", "葫芦580娃"))
- .clause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))
- .clause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"));
- // Span Term
- //return QueryBuilders.spanTermQuery("name", "葫芦580娃");
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * term query
- * 一个查询相匹配的文件包含一个术语。。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder termQuery() {
- return QueryBuilders.termQuery("name", "葫芦580娃");
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * terms query
- * 一个查询相匹配的多个value
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder termsQuery() {
- return QueryBuilders.termsQuery("name", // field
- "葫芦580娃", "葫芦3812娃") // values
- .minimumMatch(1); // 设置最小数量的匹配提供了条件。默认为1。
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * top children query
- * 构建了一种新的评分的子查询,与子类型和运行在子文档查询。这个查询的结果是,那些子父文档文件匹配。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder topChildrenQuery() {
- return QueryBuilders.topChildrenQuery(
- "blog_tag", // field
- QueryBuilders.termQuery("name", "葫芦3812娃") // Query
- )
- .score("max") // max, sum or avg
- .factor(5)
- .incrementalFactor(2);
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * wildcard query
- * 实现了通配符搜索查询。支持通配符* < /tt>,<tt>
- * 匹配任何字符序列(包括空),<tt> ? < /tt>,
- * 匹配任何单个的字符。注意该查询可以缓慢,因为它
- * 许多方面需要遍历。为了防止WildcardQueries极其缓慢。
- * 一个通配符词不应该从一个通配符* < /tt>或<tt>
- * < /tt> <tt> ?。
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder wildcardQuery() {
- return QueryBuilders.wildcardQuery("name", "葫芦*2娃");
- }
- /**
- * TODO NotSolved
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * nested query
- * 嵌套查询
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static QueryBuilder nestedQuery() {
- return QueryBuilders.nestedQuery("location", // Path
- QueryBuilders.boolQuery() // Your query
- .must(QueryBuilders.matchQuery("location.lat", 0.962590433140581))
- .must(QueryBuilders.rangeQuery("location.lon").lt(0.00000000000000000003))
- )
- .scoreMode("total"); // max, total, avg or none
- }
- /**
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * indices query
- * 索引查询
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
- protected static IndicesQueryBuilder indicesQuery() {
- // Using another query when no match for the main one
- QueryBuilders.indicesQuery(
- QueryBuilders.termQuery("name", "葫芦3812娃"),
- Es_Utils.INDEX_DEMO_01, "index2"
- ) //设置查询索引上执行时使用不匹配指数
- .noMatchQuery(QueryBuilders.termQuery("age", "葫芦3812娃"));
- // Using all (match all) or none (match no documents)
- return QueryBuilders.indicesQuery(
- QueryBuilders.termQuery("name", "葫芦3812娃"),
- Es_Utils.INDEX_DEMO_01, "index2"
- ) // 设置不匹配查询,可以是 all 或者 none
- .noMatchQuery("none");
- }
- public static void main(String[] args) {
- Es_Utils.startupClient();
- try {
- searchTest(indicesQuery());
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- Es_Utils.shutDownClient();
- }
- }
- private static void searchTest(QueryBuilder queryBuilder) {
- //预准备执行搜索
- Es_Utils.client.prepareSearch(Es_Utils.INDEX_DEMO_01)
- .setTypes(Es_Utils.INDEX_DEMO_01_MAPPING)
- .setQuery(queryBuilder)
- .setFrom(0).setSize(20).setExplain(true)
- .execute()
- //注册监听事件
- .addListener(new ActionListener<SearchResponse>() {
- @Override
- public void onResponse(SearchResponse searchResponse) {
- Es_Utils.writeSearchResponse(searchResponse);
- }
- @Override
- public void onFailure(Throwable e) {
- }
- });
- }
- }
elasticsearch------java操作之QueryBuilders构建搜索Query的更多相关文章
- 【转载】Elasticsearch--java操作之QueryBuilders构建搜索Query
原文地址:https://www.cnblogs.com/pypua/articles/9459941.html package com.elasticsearch; import org.elast ...
- elasticsearch__5__java操作之FilterBuilders构建过滤器Query
FilterBuilders构建过滤器Query 代码如下: package com.elasticsearch; import org.elasticsearch.action.ActionList ...
- elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg
分析 Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中的GROUP BY但是功能更强大. 举个例子,让我们找到所有职员中最大 ...
- java操作elasticsearch实现query String
1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...
- 使用Java操作Elasticsearch(Elasticsearch的java api使用)
1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
- Elasticsearch笔记五之java操作es
Java操作es集群步骤1:配置集群对象信息:2:创建客户端:3:查看集群信息 1:集群名称 默认集群名为elasticsearch,如果集群名称和指定的不一致则在使用节点资源时会报错. 2:嗅探功能 ...
- 2 - 基于ELK的ElasticSearch 7.8.x技术整理 - java操作篇 - 更新完毕
3.java操作ES篇 3.1.摸索java链接ES的流程 自行创建一个maven项目 3.1.1.依赖管理 点击查看代码 <properties> <ES-version>7 ...
- java操作elasticsearch实现组合桶聚合
1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...
随机推荐
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement ...
- accordion 分类
<!--accordion--><h1>accordion 分类</h1><div id="accordionId" class=&quo ...
- awk使用方法与案例介绍
一.awk简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切 ...
- dojo CsvStore简介
dojox.data.CsvStore 作者:Jared Jurkiewicz 版本:V1.0 CsvStore是由dojo提供的简单的只读存储,并且是包含在dojox项目中的.CsvStore是读取 ...
- MyEclipse完善提示配置
MyEclipse完善提示配置 一般的,MyEclipse中的提示以"."后进行提示,不是很完善.现在,修改提示配置,让提示更完善! 具体操作如下: 1.打开MyEclipse,单 ...
- Error: expected expression, got '}'
1.错误描述 Error: expected expression, got '}' .globalEval/<@http://localhost:8080/Sys/resource/globa ...
- Java引用变量的类型
Java引用变量的类型 1.编译时类型:由声明该变量时使用的类型决定 2.运行时类型:由实际赋给该变量的对象决定 如果编译时类型和运行时类型不一致,就可能出现多态性
- dojo加载树报错
1.错误描述 error loading undefined children. TypeError:this._arrayOfTopLevelItems is undefied. 2.错 ...
- java打印等腰三角形的两种方法!(根据行数,根据底边长度)
首先来看根据用户输入的底边的长度判断: package cn.edu.nwpu.java; import java.util.Scanner; public class IsoscelesTriang ...