es操作QueryBuilders用法集合

es操作QueryBuilders用法集合

工具类:

说明:这些为一个工具类,集合了QueryBuilders的多种用法
  • QueryBuilders.idsQuery
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
                                        // 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) {

                }
            });
}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
def on_mouse_down(event): draw.line((event.x, event.y, event.x, event.y), fill='black', width=10) canvas.bind('<B1-Motion>', on_mouse_move) def on_mouse_move(event): draw.line((event.x, eventQueryBuilderElasticsearch中用于构建查询的接口,它是一个抽象类,不能直接使用,需要使用.y, event.x, event.y), fill='black', width=10) def on_mouse_up(event): canvas.unbind('<B1-M它的子类来构建查询。常用的QueryBuilder子类有: 1. MatchQueryBuilder:用于匹配查询,可以otion>') undo_list.append(image.copy()) redo_list.clear() canvas.bind('<Button-1>', on_mouse_down) canvas.bind('<匹配文本、数字和日期等类型的数据。 2. TermQueryBuilder:用于精确匹配查询,只能匹ButtonRelease-1>', on_mouse_up) # 更新画布 def update_canvas(image=None): if image is None: image_t配关键词类型的数据。 3. RangeQueryBuilder:用于范围查询,可以查询某个字段在一定范围k = ImageTk.PhotoImage(image) else: image_tk = ImageTk.PhotoImage(image) canvas.config(width=image_t内的数据。 4. BoolQueryBuilder:用于组合查询,可以将多个查询条件组合起来。 QueryBuilder的用k.width(), height=image_tk.height()) canvas.delete('all') canvas.create_image(0, 0, anchor=NW,法大致如下: ```java QueryBuilder queryBuilder = QueryBuilders.matchQuery("field", "value"); SearchResponse response = client.prepare image=image_tk) canvas.image = image_tk update_canvas() # 预处理图片 def preprocess_image(image): ... Search("index") .setQuery(queryBuilder) .execute() .actionGet(); ``` 以上示例中,我们使用Match# 使用模型进行识别 def predict_image(image): ... # 运行窗口 window.mainloop() ``` 在这段QueryBuilder构建了一个匹配查询,并将其设置为查询条件。然后使用prepareSearch方法指定要查询的索引代码中,实现了撤销、重做、缩放和拖动等功能。撤销和重做的实现是名称,最后使用execute方法执行查询并获取响应结果。 需要注意的是,QueryBuilder可以进行链式调用,也可以组合多个QueryBuilder实例来构建复杂的查询条件。同时,QueryBuilder还提供了很多其他的方法通过保存历史画布状态来实现的。缩放功能是通过调整画布大小来实现的。拖动,可以根据实际需求进行灵活调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AcerMr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值