11package com .github .cleverage .elasticsearch ;
22
33import org .elasticsearch .action .admin .indices .create .CreateIndexRequestBuilder ;
4- import org .elasticsearch .action .admin .indices .delete .DeleteIndexResponse ;
54import org .elasticsearch .action .admin .indices .exists .indices .IndicesExistsRequestBuilder ;
65import org .elasticsearch .action .admin .indices .exists .indices .IndicesExistsResponse ;
76import org .elasticsearch .action .admin .indices .flush .FlushRequest ;
2625import org .elasticsearch .cluster .ClusterState ;
2726import org .elasticsearch .cluster .metadata .MappingMetaData ;
2827import org .elasticsearch .common .xcontent .XContentBuilder ;
29- import org .elasticsearch .index .percolator .PercolatorService ;
3028import org .elasticsearch .index .query .FilterBuilder ;
3129import org .elasticsearch .index .query .QueryBuilder ;
3230import org .elasticsearch .indices .IndexMissingException ;
3331import play .Logger ;
3432import play .libs .F ;
3533
3634import java .io .IOException ;
35+ import java .util .ArrayList ;
3736import java .util .Collection ;
3837import java .util .List ;
3938import java .util .Map ;
4443public abstract class IndexService {
4544
4645 public static final String INDEX_DEFAULT = IndexClient .config .indexNames [0 ];
47- public static final String INDEX_PERCOLATOR = PercolatorService . INDEX_NAME ;
46+ public static final String PERCOLATOR_TYPE = ".percolator" ;
4847
4948 /**
5049 * get indexRequest to index from a specific request
@@ -504,7 +503,7 @@ public static PutMappingResponse createMapping(String indexName, String indexTyp
504503 public static String getMapping (String indexName , String indexType ) {
505504 ClusterState state = IndexClient .client .admin ().cluster ()
506505 .prepareState ()
507- .setFilterIndices (IndexService .INDEX_DEFAULT )
506+ .setIndices (IndexService .INDEX_DEFAULT )
508507 .execute ().actionGet ().getState ();
509508 MappingMetaData mappingMetaData = state .getMetaData ().index (indexName ).mapping (indexType );
510509 if (mappingMetaData != null ) {
@@ -592,24 +591,27 @@ public static void flush(String indexName) {
592591 * @param namePercolator
593592 * @param queryBuilder
594593 * @return
595- * @throws IOException
596594 */
597595 public static IndexResponse createPercolator (String namePercolator , QueryBuilder queryBuilder ) {
596+ return createPercolator (INDEX_DEFAULT , namePercolator , queryBuilder ,false );
597+ }
598598
599+ public static IndexResponse createPercolator (String indexName , String queryName , QueryBuilder queryBuilder , boolean immediatelyAvailable ) {
599600 XContentBuilder source = null ;
600601 try {
601602 source = jsonBuilder ().startObject ()
602603 .field ("query" , queryBuilder )
603604 .endObject ();
604605 } catch (IOException e ) {
605- Logger .error ("Elasticsearch : Erreur when create percolator from a queryBuilder" , e );
606+ Logger .error ("Elasticsearch : Error when creating percolator from a queryBuilder" , e );
606607 }
607608
608609 IndexRequestBuilder percolatorRequest =
609- IndexClient .client .prepareIndex (INDEX_PERCOLATOR ,
610- IndexService .INDEX_DEFAULT ,
611- namePercolator )
612- .setSource (source );
610+ IndexClient .client .prepareIndex (indexName ,
611+ PERCOLATOR_TYPE ,
612+ queryName )
613+ .setSource (source )
614+ .setRefresh (immediatelyAvailable );
613615
614616 return percolatorRequest .execute ().actionGet ();
615617 }
@@ -623,24 +625,33 @@ public static IndexResponse createPercolator(String namePercolator, QueryBuilder
623625 * @throws IOException
624626 */
625627 public static IndexResponse createPercolator (String namePercolator , String query ) {
628+ return createPercolator (INDEX_DEFAULT ,namePercolator ,query ,false );
629+ }
626630
631+ public static IndexResponse createPercolator (String indexName , String queryName , String query , boolean immediatelyAvailable ) {
627632 IndexRequestBuilder percolatorRequest =
628- IndexClient .client .prepareIndex (INDEX_PERCOLATOR ,
629- IndexService .INDEX_DEFAULT ,
630- namePercolator )
631- .setSource ("{\" query\" : " + query + "}" );
633+ IndexClient .client .prepareIndex (indexName ,
634+ PERCOLATOR_TYPE ,
635+ queryName )
636+ .setSource ("{\" query\" : " + query + "}" )
637+ .setRefresh (immediatelyAvailable );
632638
633639 return percolatorRequest .execute ().actionGet ();
634640 }
635641
642+
636643 /**
637644 * Check if a percolator exists
638645 * @param namePercolator
639646 * @return
640647 */
641- public static boolean precolatorExists (String namePercolator ) {
648+ public static boolean percolatorExists (String namePercolator ) {
649+ return percolatorExistsInIndex (namePercolator , INDEX_DEFAULT );
650+ }
651+
652+ public static boolean percolatorExistsInIndex (String namePercolator , String indexName ){
642653 try {
643- GetResponse responseExist = IndexService .getPercolator (namePercolator );
654+ GetResponse responseExist = IndexService .getPercolator (indexName , namePercolator );
644655 return (responseExist .isExists ());
645656 } catch (IndexMissingException e ) {
646657 return false ;
@@ -654,12 +665,18 @@ public static boolean precolatorExists(String namePercolator) {
654665 * @return
655666 */
656667 public static DeleteResponse deletePercolator (String namePercolator ) {
657- return delete ( new IndexQueryPath ( INDEX_PERCOLATOR , IndexService .INDEX_DEFAULT ) , namePercolator );
668+ return deletePercolator ( IndexService .INDEX_DEFAULT , namePercolator );
658669 }
659670
660- /**
671+ public static DeleteResponse deletePercolator (String indexName , String namePercolator ) {
672+ return delete (new IndexQueryPath (indexName , PERCOLATOR_TYPE ), namePercolator );
673+ }
674+
675+
676+ // See important notes section on http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-percolate.html
677+ /*/**
661678 * Delete all percolators
662- */
679+ */ /*
663680 public static void deletePercolators() {
664681 try {
665682 DeleteIndexResponse deleteIndexResponse = IndexClient.client.admin().indices().prepareDelete(INDEX_PERCOLATOR).execute().actionGet();
@@ -671,15 +688,25 @@ public static void deletePercolators() {
671688 } catch (Exception e) {
672689 Logger.error("ElasticSearch : Index drop error : " + e.toString());
673690 }
674- }
691+ }*/
675692
676693 /**
677694 * Get the percolator details
678- * @param name
695+ * @param queryName
679696 * @return
680697 */
681- public static GetResponse getPercolator (String name ) {
682- return get (INDEX_PERCOLATOR , IndexService .INDEX_DEFAULT , name );
698+ public static GetResponse getPercolator (String queryName ) {
699+ return getPercolator (INDEX_DEFAULT , queryName );
700+ }
701+
702+ /**
703+ * Get the percolator details on an index
704+ * @param indexName
705+ * @param queryName
706+ * @return
707+ */
708+ public static GetResponse getPercolator (String indexName , String queryName ){
709+ return get (indexName , PERCOLATOR_TYPE , queryName );
683710 }
684711
685712 /**
@@ -691,7 +718,8 @@ public static GetResponse getPercolator(String name) {
691718 */
692719 public static List <String > getPercolatorsForDoc (Index indexable ) {
693720
694- PercolateRequestBuilder percolateRequestBuilder = new PercolateRequestBuilder (IndexClient .client , indexable .getIndexPath ().index , indexable .getIndexPath ().type );
721+ PercolateRequestBuilder percolateRequestBuilder = new PercolateRequestBuilder (IndexClient .client );
722+ percolateRequestBuilder .setDocumentType (indexable .getIndexPath ().type );
695723
696724 XContentBuilder doc = null ;
697725 try {
@@ -713,6 +741,11 @@ public static List<String> getPercolatorsForDoc(Index indexable) {
713741 if (percolateResponse == null ) {
714742 return null ;
715743 }
716- return percolateResponse .getMatches ();
744+ List <String > matchedQueryIds = new ArrayList <String >();
745+ PercolateResponse .Match [] matches = percolateResponse .getMatches ();
746+ for (PercolateResponse .Match match : matches ){
747+ matchedQueryIds .add (match .getId ().string ());
748+ }
749+ return matchedQueryIds ;
717750 }
718751}
0 commit comments