ElasticPress - поиск мета и расширенных пользовательских полей не работает - PullRequest
0 голосов
/ 26 апреля 2018

Мы используем Wordpress 4.9.5 с ElasticPress 2.5 и Searchly.

По умолчанию поиск работает нормально. Тем не менее, мы индексируем сотни тысяч номеров деталей, каждый из которых является постом в WordPress. Как и многие номера деталей, они имеют названия, такие как ABC-12-B23-QQ.

Мы используем ElasticPress прямо из коробки. Он рекламируется как отлично работающий прямо из коробки, но ...

Похоже, что он ищет только заголовки сообщений. Он не ищет наши дополнительные пользовательские поля вообще. Мы используем ACF для всех деталей, таких как длина, цвет и отделка, поэтому очень важно, чтобы мы могли выполнять поиск в этих полях.

Как настроить Elasticpress для поиска в моих пользовательских полях? Нужно ли использовать пользовательское сопоставление?

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

ПРИМЕЧАНИЕ. Я публикую это сообщение, чтобы оно было включено в stackoverflow для пользы других, кто ищет позже. Это сэкономило бы мне часы, если бы я нашел это в Stackoverflow в начале моего поиска. :)

1 Ответ

0 голосов
/ 26 апреля 2018

Оказывается, что да, 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);
...