javasql注入防范,elasticsearch的javaAPI之query

 2023-11-19 阅读 30 评论 0

摘要:elasticsearch的javaAPI之query API the Search API允許執行一個搜索查詢,返回一個與查詢匹配的結果(hits)。 它可以在跨一個或多個index上執行, 或者一個或多個types。 查詢可以使用提供的 query Java API 或filter Java API 。 搜索請求的主體是建立使

elasticsearch的javaAPI之query API

the Search API允許執行一個搜索查詢,返回一個與查詢匹配的結果(hits)。 它可以在跨一個或多個index上執行, 或者一個或多個types。 查詢可以使用提供的 query Java API 或filter Java API 。 搜索請求的主體是建立使用 SearchSourceBuilder上。 這里有一個例子:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.FilterBuilders.*;
import org.elasticsearch.index.query.QueryBuilders.*;
SearchResponse response = client.prepareSearch("index1", "index2").setTypes("type1", "type2").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(QueryBuilders.termQuery("multi", "test")) ? ? ? ? ? ? // Query.setPostFilter(FilterBuilders.rangeFilter("age").from(12).to(18)) ? // Filter.setFrom(0).setSize(60).setExplain(true).execute().actionGet();

javasql注入防范?請注意,所有參數都是可選的。 這是你可以寫的最小的搜索:

// MatchAll on the whole cluster with all default options
SearchResponse response = client.prepareSearch().execute().actionGet();

在Java中使用scrolls

scroll documentation

一個搜索請求返回類似a“page”of result,而scroll API可以用一個搜索語句,檢索大量的結果(甚至所有的結果),與傳統的使用游標查詢數據庫一樣。

elasticsearch開發,scrolling不用于實時請求,而是處理大量的數據,例如為了不同的配置,重建索引的內容

?

import static org.elasticsearch.index.query.FilterBuilders.*;
import static org.elasticsearch.index.query.QueryBuilders.*;QueryBuilder qb = termQuery("multi", "test");SearchResponse scrollResp = client.prepareSearch(test).setSearchType(SearchType.SCAN).setScroll(new TimeValue(60000)).setQuery(qb).setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
//Scroll until no hits are returned
while (true) {for (SearchHit hit : scrollResp.getHits()) {//Handle the hit...}scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();//Break condition: No hits are returnedif (scrollResp.getHits().getHits().length == 0) {break;}
}

線程操作

The search API允許你設置線程來執行操作,這樣實際姜執行API上執行的是相同的節點上(API上執行一個分配在同一服務器的shard上)。

jdbctemplate.query。這里有三種threading modes, The NO_THREADS 模式意味著查詢操作將zaicalling thread上執行。 SINGLE_THREAD 模式意味著將對local shards執行搜索操作,是在single different thread。THREAD_PER_SHARD 意味著搜索操作將在不同的線程上執行,對于每一個local shard。

默認的模式是 THREAD_PER_SHARD

MultiSearch API

SearchRequestBuilder srb1 = node.client().prepareSearch().setQuery(QueryBuilders.queryString("elasticsearch")).setSize(1);
SearchRequestBuilder srb2 = node.client().prepareSearch().setQuery(QueryBuilders.matchQuery("name", "kimchy")).setSize(1);MultiSearchResponse sr = node.client().prepareMultiSearch().add(srb1).add(srb2).execute().actionGet();// You will get all individual responses from MultiSearchResponse#getResponses()
long nbHits = 0;
for (MultiSearchResponse.Item item : sr.getResponses()) {SearchResponse response = item.getResponse();nbHits += response.getHits().getTotalHits();
}

Using facets

下面的代碼顯示了如何在你的搜索里添加兩個facets:

SearchResponse sr = node.client().prepareSearch().setQuery(QueryBuilders.matchAllQuery()).addFacet(FacetBuilders.termsFacet("f1").field("field")).addFacet(FacetBuilders.dateHistogramFacet("f2").field("birth").interval("year")).execute().actionGet();// Get your facet results
TermsFacet f1 = (TermsFacet) sr.getFacets().facetsAsMap().get("f1");
DateHistogramFacet f2 = (DateHistogramFacet) sr.getFacets().facetsAsMap().get("f2");
例子是facets的,但是Elasticsearch Aggregations也是不錯的選擇
?
原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/search.html#msearch
翻譯欠佳,希望不會對大家造成誤導

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/183426.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息