WordPress.org

Making WordPress.org

Ticket #1692: precision-matching.diff

File precision-matching.diff, 3.9 KB (added by gibrown, 18 months ago)

Improve precision of search relevancy

  • wp-content/plugins/plugin-directory/libs/site-search/jetpack-search.php

     
    283283                        }
    284284                }
    285285
    286                 $locale = get_locale();
    287                 if ( $locale && $locale !== 'en' && $locale !== 'en_US' ) {
    288                         $es_wp_query_args['query_fields'] = array( "title_{$locale}^1.2", 'title_en^0.2', "content_{$locale}", 'content_en^0.2', "excerpt_{$locale}^1.2", 'excerpt_en^0.2', 'author', 'tag', 'category', 'slug_ngram^0.005', 'slug^1.2', 'contributors' );
    289                 } else {
    290                         $es_wp_query_args['query_fields'] = array( 'title_en^1.2', 'content_en', 'excerpt_en^1.2', 'author', 'tag', 'category', 'slug_ngram^0.005', 'slug^1.2', 'contributors' );
    291                 }
    292 
     286                $es_wp_query_args['locale'] = get_locale();
     287               
    293288                // You can use this filter to modify the search query parameters, such as controlling the post_type.
    294289                // These arguments are in the format for convert_wp_es_to_es_args(), i.e. WP-style.
    295290                $es_wp_query_args = apply_filters( 'jetpack_search_es_wp_query_args', $es_wp_query_args, $query );
     
    487482                        'blog_id'        => get_current_blog_id(),
    488483
    489484                        'query'          => null,    // Search phrase
    490                         'query_fields'   => array( 'title_en^2', 'content_en', 'author', 'tag', 'category', 'slug_ngram', 'contributors' ),
     485                        'query_fields'   => array(), // hacking to be able to do a very different type of query
     486                        'locale'         => false,
    491487
    492488                        'post_type'      => null,  // string or an array
    493489                        'terms'          => array(), // ex: array( 'taxonomy-1' => array( 'slug' ), 'taxonomy-2' => array( 'slug-a', 'slug-b' ) )
     
    606602                        }
    607603                }
    608604
     605                if ( $args['locale'] && $args['locale'] !== 'en' && $args['locale'] !== 'en_US' ) {
     606                        $locale = $args['locale'];
     607                } else {
     608                        $locale = 'en';
     609                }
     610               
    609611                ///////////////////////////////////////////////////////////
    610612                // Build the query - potentially extracting more filters
    611613                //  TODO: add auto phrase searching
     
    618620                                        'must' => array(
    619621                                                'multi_match' => array(
    620622                                                        'query'  => $args['query'],
    621                                                         'fields' => $args['query_fields'],
    622                                                         'type'  => 'cross_fields',
     623                                                        'fields' => 'all_content_' . $locale,
     624                                                        'boost'  => 0.1,
    623625                                                        'operator' => 'and',
    624626                                                ),
    625627                                        ),
     
    627629                                                array(
    628630                                                        'multi_match' => array(
    629631                                                                'query'  => $args['query'],
    630                                                                 'fields' => $args['query_fields'],
     632                                                                'fields' => array(
     633                                                                        'title_' . $locale,
     634                                                                        'excerpt_' . $locale,
     635                                                                        'description_' . $locale,
     636                                                                        'taxonomy.plugin_tags.name',
     637                                                                ),
    631638                                                                'type'  => 'phrase',
     639                                                                'boost' => 2
    632640                                                        ),
    633641                                                ),
     642                                                array(
     643                                                        'multi_match' => array(
     644                                                                'query'  => $args['query'],
     645                                                                'fields' => array(
     646                                                                        'title_' . $locale . '.ngram'
     647                                                                ),
     648                                                                'type'  => 'phrase',
     649                                                                'boost' => 0.2
     650                                                        ),
     651                                                ),
     652                                                array(
     653                                                        'multi_match' => array(
     654                                                                'query'  => $args['query'],
     655                                                                'fields' => array(
     656                                                                        'title_' . $locale,
     657                                                                        'slug_text',
     658                                                                ),
     659                                                                'type'  => 'best_fields',
     660                                                                'boost' => 2
     661                                                        ),
     662                                                ),
     663                                                array(
     664                                                        'multi_match' => array(
     665                                                                'query'  => $args['query'],
     666                                                                'fields' => array(
     667                                                                        'excerpt_' . $locale,
     668                                                                        'description_' . $locale,
     669                                                                        'taxonomy.plugin_tags.name',
     670                                                                ),
     671                                                                'type'  => 'best_fields',
     672                                                                'boost' => 2
     673                                                        ),
     674                                                ),
     675                                                array(
     676                                                        'multi_match' => array(
     677                                                                'query'  => $args['query'],
     678                                                                'fields' => array(
     679                                                                        'author',
     680                                                                        'contributors',
     681                                                                ),
     682                                                                'type'  => 'best_fields',
     683                                                                'boost' => 2
     684                                                        ),
     685                                                ),
    634686                                        ),
    635687                                ),
    636688                        );
     
    794846                                                        ),
    795847                                                ),
    796848                                                'boost_mode' => 'multiply',
    797                                                 'max_boost' => 5,
    798849                                        )
    799850                                ),
    800851                        )