Created
February 26, 2016 20:08
-
-
Save gibrown/8fb630a63cade28b21d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Theme_Support_Index_Builder extends WPES_Abstract_Index_Builder { | |
public function get_config( $args ) { | |
$defaults = array( | |
'lang' => 'en', | |
); | |
$args = wp_parse_args( $args, $defaults ); | |
$config = array(); | |
$config['index_name'] = $args['index_name'] . '-' . $args['version']; | |
$config['rd_index_name'] = $config['index_name'] . '-rd'; | |
$config['wr_index_name'] = $config['index_name'] . '-wr'; | |
$config['settings_json'] = json_encode( array( | |
'settings' => $this->get_settings( $args ), | |
) ); | |
$config['mappings_json'] = json_encode( $this->get_mappings( $args ) ); | |
$config['doc_callbacks_serial'] = serialize( $this->get_doc_callbacks() ); | |
$config['rd_alias_json'] = json_encode( array( | |
'index' => $config['index_name'], | |
'alias' => $config['rd_index_name'], | |
) ); | |
$config['wr_alias_json'] = json_encode( array( | |
'index' => $config['index_name'], | |
'alias' => $config['wr_index_name'], | |
) ); | |
return $config; | |
} | |
public function get_settings( $args ) { | |
$defaults = array( | |
'lang' => 'en', | |
); | |
$args = wp_parse_args( $args, $defaults ); | |
$analyzer_builder = new WPES_Analyzer_Builder(); | |
$analyzers = $analyzer_builder->build_analyzers( array( $args['lang'], 'lowercase' ) ); | |
//use the lang analyzer as the default analyzer for this index | |
$analyzer_name = $analyzer_builder->get_analyzer_name( $args['lang'] ); | |
$analyzers['analyzer']['default'] = $analyzers['analyzer'][$analyzer_name]; | |
//optimized for VIP cluster | |
$global_settings = array( | |
'number_of_shards' => 2, | |
'number_of_replicas' => 1, | |
'analysis' => $analyzers, | |
); | |
return $global_settings; | |
} | |
public function get_mappings( $args ) { | |
$post_fld_bldr = new WPES_WPCOM_Post_Field_Builder(); | |
////////////////Post Mapping////////////////// | |
$post_mapping = $post_fld_bldr->get_mappings( array( | |
'index_meta' => true, | |
'index_mlt_content' => true, | |
) ); | |
$post_mapping['properties']['base_forum_id'] = array( | |
'type' => 'integer', | |
'index' => 'not_analyzed' | |
); | |
$post_mapping['properties']['base_forum_title'] = array( | |
'type' => 'string', | |
'index' => 'not_analyzed' | |
); | |
$post_mapping['properties']['base_forum_url'] = array( | |
'type' => 'string', | |
'index' => 'not_analyzed' | |
); | |
$post_mapping['properties']['forum_id'] = array( | |
'type' => 'integer', | |
'index' => 'not_analyzed' | |
); | |
$post_mapping['properties']['forum_title'] = array( | |
'type' => 'string', | |
'index' => 'not_analyzed' | |
); | |
$post_mapping['properties']['forum_url'] = array( | |
'type' => 'string', | |
'index' => 'not_analyzed' | |
); | |
unset( $post_mapping['properties']['blog'] ); | |
return array( | |
'post' => $post_mapping, | |
); | |
} | |
public function get_doc_callbacks() { | |
return array( | |
'post' => 'Theme_Support_Post_Doc_Builder', | |
); | |
} | |
} | |
class Theme_Support_Post_Doc_Builder extends WPES_Abstract_Document_Builder { | |
public function get_id( $args ) { | |
return $args['blog_id'] . '-p-' . $args['id']; | |
} | |
public function get_type( $args ) { | |
return 'post'; | |
} | |
public function get_parent_id( $args ) { | |
return false; | |
} | |
public function doc( $args ) { | |
// Attempt to register the bbPress CPTs here until we find a better way | |
$post_type_opts = array( | |
'public' => true, | |
'exclude_from_search' => false, | |
); | |
register_post_type( 'forum', $post_type_opts ); | |
register_post_type( 'topic', $post_type_opts ); | |
register_post_type( 'reply', $post_type_opts ); | |
$post_fld_bldr = new WPES_WPCOM_Post_Field_Builder(); | |
switch_to_blog( $args['blog_id'] ); | |
$fld_args = array( | |
'blog_id' => $args['blog_id'], | |
'post_id' => $args['id'], | |
'index_meta' => true, | |
'index_mlt_content' => true, | |
); | |
$data = $post_fld_bldr->get_all_fields( $fld_args ); | |
unset( $data['blog'] ); | |
$parent_id = $data['parent_post_id']; | |
$this->add_parents( $parent_id, $data); | |
restore_current_blog(); | |
return $data; | |
} | |
public function update( $args ) { | |
$post_fld_bldr = new WPES_WPCOM_Post_Field_Builder(); | |
return $post_fld_bldr->get_update_script( $args ); | |
} | |
public function is_indexable( $args ) { | |
switch_to_blog( $args['blog_id'] ); | |
$post = get_post( $args['id'] ); | |
restore_current_blog(); | |
return $post->post_type == 'topic'; | |
} | |
public function get_doc_iterator( $args ) { | |
$it = new WPES_WP_Post_Iterator(); | |
$it->init( array( | |
'blog_id' => $args['blog_id'], | |
'sql_where' => "post_status NOT IN ('auto-draft','inherit', 'draft', 'spam', 'trash') AND post_type = 'topic'", | |
'doc_builder' => $this, | |
'start' => $args['start'], | |
) ); | |
return $it; | |
} | |
private function add_parents( $parent_id, &$data ) { | |
if ( is_numeric( $parent_id ) ) { | |
$post = get_post( $parent_id ); | |
if ( $post->post_parent > 0 ) { | |
$data["forum_id"] = $post->ID; | |
$data["forum_title"] = $post->post_title; | |
$data["forum_url"] = get_post_permalink( $parent_id ); | |
$this->add_parents( $post->post_parent, $data ); | |
} else { | |
$data["base_forum_id"] = $post->ID; | |
$data["base_forum_title"] = $post->post_title; | |
$data["base_forum_url"] = get_post_permalink( $parent_id ); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment