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 是 ...
随机推荐
- Pymongo一些常见需求(陆续补充)
总结一下最近包括之前遇到的一些pymongo操作的问题. #需求1: 搜索文档数组里边是否存在某元素 数据: data1 = { '_id': xxxxxxxxxxxxxx, 'dataList': ...
- 将FTP映射至Windows
在经常使用ftp传输文件的环境中,每次上传和下载文件都需要重新连接然后登录是非常繁琐的一件事情.我们可以将FTP空间映射到本地磁盘空间,免去输入地址以及账号.密码.方便我们日常中文件的上传和下载. 1 ...
- Centos定时启动和清除任务
因为需要定时并发执行任务,所以查到了crontab这个工具,介绍一下其用法: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=roo ...
- HttpClient调用RestFul接口(post和get方式)
/** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...
- iOS学习 NSString常用技巧
字符串是程序设计最常用的数据类型之一了.在Mac/iPhone编程中,苹果为我们提供了一个不同的字符串类型NSString.有别与普通的String为数据类型,NSString其实是一个对象类型.NS ...
- 浅谈this关键字
在我学习this关键字的时候,通过查找资料总结出一些this的特殊用法, 供大家参考,代码里面有我总结的分析过程! 箭头函数里的this: var username = "全局"; ...
- 5.4 TLP中与数据负载相关的参数
在PCIe总线中,有些TLP含有Data Payload,如存储器写请求.存储器读完成TLP等.在PCIe总线中,TLP含有的Data Payload大小与Max_Payload_Size.Max_R ...
- 3.3.5 DMA写时发生Cache命中的优化
在许多高性能处理器中,还提出了一些新的概念,以加速外设到存储器的DMA写过程.如Freescale的I/O Stashing和Intel的IOAT技术. 如图3?8所示,当设备进行存储器写时,如果可以 ...
- SAS随机抽样以及程序初始环境
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本来转载于SAS随机抽样 在统计研究中,针对容 ...
- plx9030触发pci中断
if(((SWAB_16(PLX_INT(0x4C)))&0x04)==0x04) { ErrNo = *(UINT16*)(g_MemBase+0XFFFE*2); /*logMsg(&qu ...