ElasticPress - 搜索元和高级自定义字段不起作用

问题描述 投票:1回答:1

我们正在使用Wordpress 4.9.5与ElasticPress 2.5和Searchly。

默认搜索工作正常。但是,我们正在索引数十万个零件号,每个零件号都是wordpress中的一个帖子。像许多零件编号一样,它们的标题如ABC-12-B23-QQ。

我们正在使用ElasticPress开箱即用。它广告宣传为开箱即用,但......

它似乎只搜索帖子标题。它根本不是在搜索我们的高级自定义字段。我们使用ACF来获取所有零件细节,例如长度,颜色和光洁度,因此我们能够搜索这些字段非常重要。

如何让Elasticpress搜索我的自定义字段?我需要使用自定义映射吗?

https://github.com/10up/ElasticPress

注意:我发布此信息,因此它包含在stackoverflow中,以便以后搜索的其他人使用。如果我在搜索开始时在Stackoverflow上找到它,它本可以节省我几个小时。 :)

wordpress elasticsearch advanced-custom-fields elasticsearch-plugin searchly
1个回答
1
投票

事实证明,是的,ElasticPress会自动映射所有元字段,但默认情况下,它不会搜索它们。

根据文件(https://github.com/10up/ElasticPress),

“以下是仅由ElasticPress支持的特殊参数。

search_fields (array)
If not specified, defaults to array( 'post_title', 'post_excerpt', 'post_content' ).

这是我的问题。要解决这个问题,您必须告诉ElasticPress要搜索的字段。

ElasticPress文档包含使用WP_Query的此示例:

new WP_Query( array(
    's'             => 'meta search phrase',
    'search_fields' => array(
        'post_title',
        'post_content',
        'post_excerpt',
        'meta' => array( 'meta_key_1', 'meta_key_2' ),
    ),
) );

我真的需要挂钩现有的搜索查询,所以这里是我使用pre_get_posts操作做的一个例子:

function my_search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search() ) {
        $query->set('search_fields', array(
        'post_title',
        'meta' => array( 'bin_part_number',
                        'shelf_part_number',
                        )));
    }
  }
}
add_action('pre_get_posts','my_search_filter',1);
© www.soinside.com 2019 - 2024. All rights reserved.