Elasticsearch的javaAPI之count
count API允許輕松地執行一個查詢,獲得匹配的數量,可以跨越一個或多個index ,一個或多個type。?
import static org.elasticsearch.index.query.xcontent.FilterBuilders.*; import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;CountResponse response = client.prepareCount("test").setQuery(termQuery("_type", "type1")).execute().actionGet();
有關計算操作的更多信息,請查看Rest count docs。
The search API允許你設置線程來執行操作,這樣實際姜執行API上執行的是相同的節點上(API上執行一個分配在同一服務器的shard上)。
這里有三種threading modes, The NO_THREADS
模式意味著查詢操作將在calling thread上執行。 SINGLE_THREAD
模式意味著將對local shards執行搜索操作,是在single different thread。THREAD_PER_SHARD
意味著搜索操作將在不同的線程上執行,對于每一個local shard。
默認的模式是 SINGLE_THREAD
。
Elasticsearch的javaAPI之delete by query
Delete by query API允許基于查詢的基礎上刪除documents,從一個或多個基于index和一個或多個type。 在這里 是一個例子:
import static org.elasticsearch.index.query.FilterBuilders.*; import static org.elasticsearch.index.query.QueryBuilders.*;DeleteByQueryResponse response = client.prepareDeleteByQuery("test").setQuery(termQuery("_type", "type1")).execute().actionGet();
?
elasticsearch之javaAPI之facets
?
對于facets,Elasticsearch提供了完善的Java API,可以看Facets guide。
使用為facets builders建立的工廠(FacetBuilders)
來構建,添加你想計算的某方面在查詢的時候,并將它添加到你的搜索請求:
SearchResponse sr = node.client().prepareSearch().setQuery( /* your query */ ).addFacet( /* add a facet */ ).execute().actionGet();
注意,您可以添加多個facets。 可以看Search java APP獲取詳細信息。
構建facets的請求,使用 FacetBuilders
helpers,僅僅是導入它們:
import org.elasticsearch.search.facet.FacetBuilders.*;
下面是如何使用term facet(Java API)。
這里是關于如何創建一個facet request:
FacetBuilders.termsFacet("f").field("brand").size(10);
導入facet 類
import org.elasticsearch.search.facet.terms.*;
?
// sr is here your SearchResponse object TermsFacet f = (TermsFacet) sr.getFacets().facetsAsMap().get("f");f.getTotalCount(); ? ? ?// Total terms doc count f.getOtherCount(); ? ? ?// Not shown terms doc count f.getMissingCount(); ? ?// Without term doc count// For each entry for (TermsFacet.Entry entry : f) {entry.getTerm(); ? ?// Termentry.getCount(); ? // Doc count }
?
Range facet
下面是如何使用Range facet與Java API。
準備facet request
這里是關于如何創建一個例子(facet request):
FacetBuilders.rangeFacet("f").field("price") ? ? ? ? // Field to compute on.addUnboundedFrom(3) ? ?// from -infinity to 3 (excluded).addRange(3, 6) ? ? ? ? // from 3 to 6 (excluded).addUnboundedTo(6); ? ? // from 6 to +infinity
Use facet response
Import facet相關類:
import org.elasticsearch.search.facet.range.*;
// sr is here your SearchResponse object RangeFacet f = (RangeFacet) sr.getFacets().facetsAsMap().get("f");// For each entry for (RangeFacet.Entry entry : f) {entry.getFrom(); ? ?// Range from requestedentry.getTo(); ? ? ?// Range to requestedentry.getCount(); ? // Doc countentry.getMin(); ? ? // Min valueentry.getMax(); ? ? // Max valueentry.getMean(); ? ?// Meanentry.getTotal(); ? // Sum of values }
下面是如何使用 柱狀圖facet(Java API)。
這里是關于如何創建一個facet request:
HistogramFacetBuilder facet = FacetBuilders.histogramFacet("f").field("price").interval(1);
導入facet相關類:
import org.elasticsearch.search.facet.histogram.*;
// sr is here your SearchResponse object HistogramFacet f = (HistogramFacet) sr.getFacets().facetsAsMap().get("f");// For each entry for (HistogramFacet.Entry entry : f) {entry.getKey(); ? ? // Key (X-Axis)entry.getCount(); ? // Doc count (Y-Axis) }
下面是如何使用日期直方圖facet(Java API)。
準備facet request
這里是關于如何創建一個例子facet request:
?
FacetBuilders.dateHistogramFacet("f").field("date") ? ? ?// Your date field.interval("year"); ?// You can also use "quarter", "month", "week", "day",// "hour" and "minute" or notation like "1.5h" or "2w"
導入facet相關類:
import org.elasticsearch.search.facet.datehistogram.*;
// sr is here your SearchResponse object DateHistogramFacet f = (DateHistogramFacet) sr.getFacets().facetsAsMap().get("f");// For each entry for (DateHistogramFacet.Entry entry : f) {entry.getTime(); ? ?// Date in ms since epoch (X-Axis)entry.getCount(); ? // Doc count (Y-Axis) }
下面是如何使用 facet filter(Java API)。
如果你正在尋找如何應用一個過濾器用于facet,看Java API中的facet filter。
這里是關于如何創建一個例子facet request:
FacetBuilders.filterFacet("f",FilterBuilders.termFilter("brand", "heineken")); ? ?// Your Filter here
看到filters來學習如何使用構建過濾器。
導入相關類:
import org.elasticsearch.search.facet.filter.*;
// sr is here your SearchResponse object FilterFacet f = (FilterFacet) sr.getFacets().facetsAsMap().get("f");f.getCount(); ? // Number of docs that matched
Query facet
下面是如何使用query facet(Java API)。
這里是關于如何創建一個例子facet request:
FacetBuilders.queryFacet("f",QueryBuilders.matchQuery("brand", "heineken"));
?
導入相關類類:
import org.elasticsearch.search.facet.query.*;
// sr is here your SearchResponse object QueryFacet f = (QueryFacet) sr.getFacets().facetsAsMap().get("f");f.getCount(); ? // Number of docs that matched
?
Statistical
下面是如何使用的 統計facet(Java API)。
這里是關于如何創建一個例子:
FacetBuilders.statisticalFacet("f").field("price");
import org.elasticsearch.search.facet.statistical.*;
// sr is here your SearchResponse object StatisticalFacet f = (StatisticalFacet) sr.getFacets().facetsAsMap().get("f");f.getCount(); ? ? ? ? ? // Doc count f.getMin(); ? ? ? ? ? ? // Min value f.getMax(); ? ? ? ? ? ? // Max value f.getMean(); ? ? ? ? ? ?// Mean f.getTotal(); ? ? ? ? ? // Sum of values f.getStdDeviation(); ? ?// Standard Deviation f.getSumOfSquares(); ? ?// Sum of Squares f.getVariance(); ? ? ? ?// Variance
?
Terms stats facet
下面是如何使用的 Terms stats facet(Java API)。
這里是關于如何創建一個例子:
FacetBuilders.termsStatsFacet("f").keyField("brand").valueField("price");
導入相關類
import org.elasticsearch.search.facet.termsstats.*;
// sr is here your SearchResponse object TermsStatsFacet f = (TermsStatsFacet) sr.getFacets().facetsAsMap().get("f"); f.getTotalCount(); ? ? ?// Total terms doc count f.getOtherCount(); ? ? ?// Not shown terms doc count f.getMissingCount(); ? ?// Without term doc count// For each entry for (TermsStatsFacet.Entry entry : f) {entry.getTerm(); ? ? ? ? ? ?// Termentry.getCount(); ? ? ? ? ? // Doc countentry.getMin(); ? ? ? ? ? ? // Min valueentry.getMax(); ? ? ? ? ? ? // Max valueentry.getMean(); ? ? ? ? ? ?// Meanentry.getTotal(); ? ? ? ? ? // Sum of values }
Geo distance facet
下面是如何使用距離facet(Java API)。
這里是關于如何創建一個例子:
FacetBuilders.geoDistanceFacet("f").field("pin.location") ? ? ? ? ? ? ?// Field containing coordinates we want to compare with.point(40, -70) ? ? ? ? ? ? ? ? ? ? // Point from where we start (0).addUnboundedFrom(10) ? ? ? ? ? ? ? // 0 to 10 km (excluded).addRange(10, 20) ? ? ? ? ? ? ? ? ? // 10 to 20 km (excluded).addRange(20, 100) ? ? ? ? ? ? ? ? ?// 20 to 100 km (excluded).addUnboundedTo(100) ? ? ? ? ? ? ? ?// from 100 km to infinity (and beyond ;-) ).unit(DistanceUnit.KILOMETERS); ? ? // All distances are in kilometers. Can be MILES
import org.elasticsearch.search.facet.geodistance.*;
// sr is here your SearchResponse object GeoDistanceFacet f = (GeoDistanceFacet) sr.getFacets().facetsAsMap().get("f");// For each entry for (GeoDistanceFacet.Entry entry : f) {entry.getFrom(); ? ? ? ? ? ?// Distance from requestedentry.getTo(); ? ? ? ? ? ? ?// Distance to requestedentry.getCount(); ? ? ? ? ? // Doc countentry.getMin(); ? ? ? ? ? ? // Min valueentry.getMax(); ? ? ? ? ? ? // Max valueentry.getTotal(); ? ? ? ? ? // Sum of valuesentry.getMean(); ? ? ? ? ? ?// Mean }
Facet filter(not filter facet)
默認情況下,facet應用與查詢結果集無論過濾器是否存在。
如果你需要計算facet在相同的過濾器或者其他過濾器,您可以添加facet到任何的過濾器,用 AbstractFacetBuilder #facetFilter(FilterBuilder)
方法:
FacetBuilders.termsFacet("f").field("brand") // Your facet.facetFilter( // Your filter hereFilterBuilders.termFilter("colour", "pale"));
例如,您可以重用相同的過濾器創建你的查詢:
// A common filter FilterBuilder filter = FilterBuilders.termFilter("colour", "pale");TermsFacetBuilder facet = FacetBuilders.termsFacet("f").field("brand").facetFilter(filter); ? ? ? ? ? ? ? ? ? ? ? ? ? // We apply it to the facetSearchResponse sr = node.client().prepareSearch().setQuery(QueryBuilders.matchAllQuery()).setFilter(filter) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// We apply it to the query.addFacet(facet).execute().actionGet();
Scope
默認情況下,facet在查詢結果集中計算。 但是你也可以計算facet的在整個index,無論查詢是什么, 使用global參數:
TermsFacetBuilder facet = FacetBuilders.termsFacet("f").field("brand").global(true);
原文:
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/java-facets.html#_use_facet_response_2
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/delete-by-query.html
http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/count.html
翻譯欠佳,希望不會對大家造成誤導
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态