11
22package org .xbib .elasticsearch .action ;
33
4- import org .elasticsearch .ElasticSearchIllegalArgumentException ;
54import org .elasticsearch .action .admin .cluster .health .ClusterHealthStatus ;
65import org .elasticsearch .action .admin .cluster .state .ClusterStateRequestBuilder ;
76import org .elasticsearch .action .admin .cluster .state .ClusterStateResponse ;
1110import org .elasticsearch .action .search .SearchRequest ;
1211import org .elasticsearch .action .search .SearchResponse ;
1312import org .elasticsearch .action .search .SearchType ;
14- import org .elasticsearch .action .support .IgnoreIndices ;
1513import org .elasticsearch .client .Client ;
1614import org .elasticsearch .cluster .ClusterName ;
1715import org .elasticsearch .cluster .ClusterService ;
2119import org .elasticsearch .common .Strings ;
2220import org .elasticsearch .common .bytes .BytesArray ;
2321import org .elasticsearch .common .collect .ImmutableSet ;
22+ import org .elasticsearch .common .hppc .cursors .ObjectCursor ;
2423import org .elasticsearch .common .inject .Inject ;
2524import org .elasticsearch .common .settings .Settings ;
2625import org .elasticsearch .common .settings .SettingsFilter ;
3332import org .elasticsearch .common .xcontent .XContentType ;
3433import org .elasticsearch .env .Environment ;
3534import org .elasticsearch .index .VersionType ;
36- import org .elasticsearch .index .query .QueryBuilders ;
37- import org .elasticsearch .index .query .QueryStringQueryBuilder ;
3835import org .elasticsearch .rest .BaseRestHandler ;
3936import org .elasticsearch .rest .RestChannel ;
4037import org .elasticsearch .rest .RestController ;
4138import org .elasticsearch .rest .RestHandler ;
4239import org .elasticsearch .rest .RestRequest ;
4340import org .elasticsearch .rest .XContentRestResponse ;
4441import org .elasticsearch .rest .XContentThrowableRestResponse ;
45- import org .elasticsearch .rest .action .support .RestActions ;
46- import org .elasticsearch .search .Scroll ;
42+ import org .elasticsearch .rest .action .search .RestSearchAction ;
4743import org .elasticsearch .search .SearchHit ;
4844
49- import org .elasticsearch .search .builder .SearchSourceBuilder ;
50- import org .elasticsearch .search .sort .SortOrder ;
5145import org .xbib .elasticsearch .plugin .knapsack .KnapsackHelper ;
5246import org .xbib .elasticsearch .plugin .knapsack .KnapsackPacket ;
5347import org .xbib .elasticsearch .plugin .knapsack .KnapsackStatus ;
6862import static org .elasticsearch .client .Requests .createIndexRequest ;
6963import static org .elasticsearch .common .collect .Maps .newHashMap ;
7064import static org .elasticsearch .common .collect .Sets .newHashSet ;
71- import static org .elasticsearch .common .unit .TimeValue .parseTimeValue ;
7265import static org .elasticsearch .common .xcontent .ToXContent .EMPTY_PARAMS ;
7366import static org .elasticsearch .common .xcontent .XContentFactory .jsonBuilder ;
7467import static org .elasticsearch .rest .RestRequest .Method .GET ;
@@ -106,7 +99,7 @@ public RestExportAction(Settings settings,
10699 this .clusterName = clusterName ;
107100 this .settingsFilter = settingsFilter ;
108101 this .knapsackHelper = new KnapsackHelper (client , clusterService );
109- this .executor = EsExecutors .newScalingExecutorService (0 , 10 , 7L , TimeUnit .DAYS ,
102+ this .executor = EsExecutors .newScaling (0 , 10 , 7L , TimeUnit .DAYS ,
110103 EsExecutors .daemonThreadFactory (settings , "knapsack-export" ));
111104
112105 controller .registerHandler (POST , "/_export" , this );
@@ -305,7 +298,7 @@ public void run() {
305298 SearchRequest searchRequest ;
306299 // override size = 10 default
307300 request .params ().put ("size" , request .param ("maxActionsPerBulkRequest" , "1000" ));
308- searchRequest = parseSearchRequest (request );
301+ searchRequest = RestSearchAction . parseSearchRequest (request );
309302 searchRequest .listenerThreaded (false );
310303 SearchOperationThreading operationThreading =
311304 SearchOperationThreading .fromString (request .param ("operation_threading" ), null );
@@ -441,9 +434,9 @@ private String mapType(String index, String type) {
441434 private Map <String , String > getSettings (String ... index ) throws IOException {
442435 Map <String , String > settings = newHashMap ();
443436 ClusterStateRequestBuilder request = client .admin ().cluster ().prepareState ()
444- .setFilterRoutingTable (true )
445- .setFilterNodes (true )
446- .setFilterIndices (index );
437+ .setRoutingTable (true )
438+ .setNodes (true )
439+ .setIndices (index );
447440 ClusterStateResponse response = request .execute ().actionGet ();
448441 MetaData metaData = response .getState ().metaData ();
449442 if (!metaData .getIndices ().isEmpty ()) {
@@ -465,17 +458,17 @@ private Map<String, String> getSettings(String... index) throws IOException {
465458 private Map <String , String > getMapping (String index , Set <String > types ) throws IOException {
466459 Map <String , String > mappings = newHashMap ();
467460 ClusterStateRequestBuilder request = client .admin ().cluster ().prepareState ()
468- .setFilterRoutingTable (true )
469- .setFilterNodes (true );
461+ .setRoutingTable (true )
462+ .setNodes (true );
470463 if (!"_all" .equals (index )) {
471- request .setFilterIndices (index );
464+ request .setIndices (index );
472465 }
473466 ClusterStateResponse response = request .execute ().actionGet ();
474467 MetaData metaData = response .getState ().getMetaData ();
475468 if (!metaData .getIndices ().isEmpty ()) {
476469 for (IndexMetaData indexMetaData : metaData ) {
477- for (Map . Entry < String , MappingMetaData > c : indexMetaData .getMappings ().entrySet ()) {
478- MappingMetaData mappingMetaData = c .getValue () ;
470+ for (ObjectCursor < MappingMetaData > c : indexMetaData .getMappings ().values ()) {
471+ MappingMetaData mappingMetaData = c .value ;
479472 if (types == null || types .isEmpty () || types .contains (mappingMetaData .type ())) {
480473 final XContentBuilder builder = jsonBuilder ();
481474 builder .startObject ();
@@ -530,7 +523,7 @@ public void handleRequest(RestRequest request, RestChannel channel) {
530523 builder .endArray ()
531524 .endObject ();
532525 executor .shutdownNow ();
533- executor = EsExecutors .newScalingExecutorService (0 , 10 , 7L , TimeUnit .DAYS ,
526+ executor = EsExecutors .newScaling (0 , 10 , 7L , TimeUnit .DAYS ,
534527 EsExecutors .daemonThreadFactory (settings , "knapsack-export" ));
535528 channel .sendResponse (new XContentRestResponse (request , OK , builder ));
536529 } catch (IOException ioe ) {
@@ -543,168 +536,4 @@ public void handleRequest(RestRequest request, RestChannel channel) {
543536 }
544537 }
545538
546-
547- private SearchRequest parseSearchRequest (RestRequest request ) {
548- String [] indices = RestActions .splitIndices (request .param ("index" ));
549- SearchRequest searchRequest = new SearchRequest (indices );
550- // get the content, and put it in the body
551- if (request .hasContent ()) {
552- searchRequest .source (request .content (), request .contentUnsafe ());
553- } else {
554- String source = request .param ("source" );
555- if (source != null ) {
556- searchRequest .source (source );
557- }
558- }
559- // add extra source based on the request parameters
560- searchRequest .extraSource (parseSearchSource (request ));
561-
562- searchRequest .searchType (request .param ("search_type" ));
563-
564- String scroll = request .param ("scroll" );
565- if (scroll != null ) {
566- searchRequest .scroll (new Scroll (parseTimeValue (scroll , null )));
567- }
568-
569- searchRequest .types (RestActions .splitTypes (request .param ("type" )));
570- searchRequest .queryHint (request .param ("query_hint" ));
571- searchRequest .routing (request .param ("routing" ));
572- searchRequest .preference (request .param ("preference" ));
573- if (request .hasParam ("ignore_indices" )) {
574- searchRequest .ignoreIndices (IgnoreIndices .fromString (request .param ("ignore_indices" )));
575- }
576-
577- return searchRequest ;
578- }
579-
580- private SearchSourceBuilder parseSearchSource (RestRequest request ) {
581- SearchSourceBuilder searchSourceBuilder = null ;
582- String queryString = request .param ("q" );
583- if (queryString != null ) {
584- QueryStringQueryBuilder queryBuilder = QueryBuilders .queryString (queryString );
585- queryBuilder .defaultField (request .param ("df" ));
586- queryBuilder .analyzer (request .param ("analyzer" ));
587- queryBuilder .analyzeWildcard (request .paramAsBoolean ("analyze_wildcard" , false ));
588- queryBuilder .lowercaseExpandedTerms (request .paramAsBoolean ("lowercase_expanded_terms" , true ));
589- queryBuilder .lenient (request .paramAsBooleanOptional ("lenient" , null ));
590- String defaultOperator = request .param ("default_operator" );
591- if (defaultOperator != null ) {
592- if ("OR" .equals (defaultOperator )) {
593- queryBuilder .defaultOperator (QueryStringQueryBuilder .Operator .OR );
594- } else if ("AND" .equals (defaultOperator )) {
595- queryBuilder .defaultOperator (QueryStringQueryBuilder .Operator .AND );
596- } else {
597- throw new ElasticSearchIllegalArgumentException ("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]" );
598- }
599- }
600- if (searchSourceBuilder == null ) {
601- searchSourceBuilder = new SearchSourceBuilder ();
602- }
603- searchSourceBuilder .query (queryBuilder );
604- }
605-
606- int from = request .paramAsInt ("from" , -1 );
607- if (from != -1 ) {
608- if (searchSourceBuilder == null ) {
609- searchSourceBuilder = new SearchSourceBuilder ();
610- }
611- searchSourceBuilder .from (from );
612- }
613- int size = request .paramAsInt ("size" , -1 );
614- if (size != -1 ) {
615- if (searchSourceBuilder == null ) {
616- searchSourceBuilder = new SearchSourceBuilder ();
617- }
618- searchSourceBuilder .size (size );
619- }
620-
621- if (request .hasParam ("explain" )) {
622- if (searchSourceBuilder == null ) {
623- searchSourceBuilder = new SearchSourceBuilder ();
624- }
625- searchSourceBuilder .explain (request .paramAsBooleanOptional ("explain" , null ));
626- }
627- if (request .hasParam ("version" )) {
628- if (searchSourceBuilder == null ) {
629- searchSourceBuilder = new SearchSourceBuilder ();
630- }
631- searchSourceBuilder .version (request .paramAsBooleanOptional ("version" , null ));
632- }
633- if (request .hasParam ("timeout" )) {
634- if (searchSourceBuilder == null ) {
635- searchSourceBuilder = new SearchSourceBuilder ();
636- }
637- searchSourceBuilder .timeout (request .paramAsTime ("timeout" , null ));
638- }
639-
640- String sField = request .param ("fields" );
641- if (sField != null ) {
642- if (searchSourceBuilder == null ) {
643- searchSourceBuilder = new SearchSourceBuilder ();
644- }
645- if (!Strings .hasText (sField )) {
646- searchSourceBuilder .noFields ();
647- } else {
648- String [] sFields = Strings .splitStringByCommaToArray (sField );
649- if (sFields != null ) {
650- for (String field : sFields ) {
651- searchSourceBuilder .field (field );
652- }
653- }
654- }
655- }
656-
657- String sSorts = request .param ("sort" );
658- if (sSorts != null ) {
659- if (searchSourceBuilder == null ) {
660- searchSourceBuilder = new SearchSourceBuilder ();
661- }
662- String [] sorts = Strings .splitStringByCommaToArray (sSorts );
663- for (String sort : sorts ) {
664- int delimiter = sort .lastIndexOf (":" );
665- if (delimiter != -1 ) {
666- String sortField = sort .substring (0 , delimiter );
667- String reverse = sort .substring (delimiter + 1 );
668- if ("asc" .equals (reverse )) {
669- searchSourceBuilder .sort (sortField , SortOrder .ASC );
670- } else if ("desc" .equals (reverse )) {
671- searchSourceBuilder .sort (sortField , SortOrder .DESC );
672- }
673- } else {
674- searchSourceBuilder .sort (sort );
675- }
676- }
677- }
678-
679- String sIndicesBoost = request .param ("indices_boost" );
680- if (sIndicesBoost != null ) {
681- if (searchSourceBuilder == null ) {
682- searchSourceBuilder = new SearchSourceBuilder ();
683- }
684- String [] indicesBoost = Strings .splitStringByCommaToArray (sIndicesBoost );
685- for (String indexBoost : indicesBoost ) {
686- int divisor = indexBoost .indexOf (',' );
687- if (divisor == -1 ) {
688- throw new ElasticSearchIllegalArgumentException ("Illegal index boost [" + indexBoost + "], no ','" );
689- }
690- String indexName = indexBoost .substring (0 , divisor );
691- String sBoost = indexBoost .substring (divisor + 1 );
692- try {
693- searchSourceBuilder .indexBoost (indexName , Float .parseFloat (sBoost ));
694- } catch (NumberFormatException e ) {
695- throw new ElasticSearchIllegalArgumentException ("Illegal index boost [" + indexBoost + "], boost not a float number" );
696- }
697- }
698- }
699-
700- String sStats = request .param ("stats" );
701- if (sStats != null ) {
702- if (searchSourceBuilder == null ) {
703- searchSourceBuilder = new SearchSourceBuilder ();
704- }
705- searchSourceBuilder .stats (Strings .splitStringByCommaToArray (sStats ));
706- }
707-
708- return searchSourceBuilder ;
709- }
710539}
0 commit comments