为什么我的代码无法正确索引所有帖子?

时间:2019-03-23 15:19:40

标签: php wordpress algolia

我有超过600,000个帖子要由Algolia(基于Wordpress)进行索引,因此我编写了一个“ reindex_post”命令,以使我的所有帖子都可以成批索引,以避免内存用完。但是,当我在WP-CLI中使用此命令时,某些帖子似乎未正确索引,我发现了两个错误:

  1. 有些帖子虽然可以在Algolia的后端看到,但无法从我的前端搜索。

  2. 当我在前端输入多于3个字符时,自动补全不起作用,尽管当我输入少于3个字符时它会起作用。

我安装了Algolia wordpress插件,并尝试使用它索引我的帖子,发现它运行良好。以下两个问题均未发生。唯一的问题是我无法通过这种方式索引600,000个帖子。

公共函数reindex_post($ args,$ assoc_args)     {

    $start = 0;
    $end = 0;
    if (count($args) === 1) {
        $arr = explode(',', $args[0]);
        $start = intval($arr[0]);
        $end = intval($arr[1]);
        echo "鍚姩鍒嗛〉锛?{start}->${end}\n";
    }
    global $algolia;
    $index = $algolia->initIndex('wp_searchable_posts');
    $paged = $start;
    $count = 0;
    do {

        $posts = new WP_Query([
            'posts_per_page' => 50,
            'paged' => $paged,
            'post_type' => 'post'
        ]);

        if (!$posts->have_posts()) {
            break;
        }

        $records = [];
        foreach ($posts->posts as $post) {
            if ($assoc_args['verbose']) {
                WP_CLI::line('Serializing [' . $post->post_title . ']');
            }
            $record = (array)apply_filters('post_to_record', $post);

            if (!isset($record['objectID'])) {
                $record['objectID'] = implode('#', [$post->post_type, $post->ID]);
            }

            $records[] = $record;
            $count++;
        }

        if ($assoc_args['verbose']) {
            WP_CLI::line('Sending batch');
        }
        $index->saveObjects($records);

        $paged++;
        if ($paged > $end) {
            break;
        }
    } while (true);

    WP_CLI::success("$count posts indexed in Algolia");
}

}

我是一名新程序员,对php不太熟悉。如果有人可以告诉我如何进行精确修改,我将不胜感激

0 个答案:

没有答案