seo优化全解第1版-搜索引擎入门详解(el学院全文搜索功能(支持多模型搜索)())
优采云 发布时间: 2021-09-12 01:03seo优化全解第1版-搜索引擎入门详解(el学院全文搜索功能(支持多模型搜索)())
基于xunsearch + Laravel Scout实现Laravel Academy全文搜索功能(支持多模型搜索)
由College Jun 3 年前创建,最后更新于11 个月前版本#216225 views11 likes1 采集
概述
Laravel Scout 为实现 Eloquent 模型全文搜索提供了一个简单的、基于驱动程序的解决方案。通过使用模型观察器,Scout 会自动更新模型记录的索引,非常方便易用。学院的文章搜索功能可以通过它来实现。
Laravel Scout 基于模型+底层搜索驱动扩展包实现模型全文搜索。目前Scout默认通过Algolia驱动提供搜索功能。但是,编写自定义驱动程序非常简单,我们可以通过自己的搜索扩展Scout轻松实现。毕竟Algolia是付费API,而且是对外服务。国内的访问速度和可用性无法保证,所以自然略过。下一个选择是自己构建一个搜索引擎。中文搜索的解决方案有很多,比如轻量级的Xunsearch(xunsearch)、coreseek(sphinx变体,支持中文搜索),适合中小型应用,Elasticsearch适合大型应用。
就学院的规模来说,寻搜就够了。它简单易用。只需几步,快速搭建自己的搜索引擎,其客户中就有中国知名编程社区segmentfault。背书也能让我们放心使用。
安装迅搜服务器
在服务器上安装迅搜非常简单,只需以下几步即可:
wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2
tar -xjf xunsearch-full-latest.tar.bz2 xunsearch
cd xunsearch/
sudo sh setup.sh
安装完成后,使用以下命令启动:
sudo bin/xs-ctl.sh start
上述命令默认会*敏*感*词*本地环回地址(127.0.0.1)8383/8384)上的服务。如果有多台机器需要访问迅搜服务器,则需要使用以下命令启动:
bin/xs-ctl.sh -b inet start
以上过程没有报错,说明寻搜已经正常启动。
如果是通过Docker启动迅搜服务,对应的Dockerfile如下:
# xunsearch-dev docker
# created by hightman.20150826
#
# START COMMAND:
# docker run -d --name xunsearch -p 8383:8383 -p 8384:8384 \
# -v /var/xunsearch/data:/usr/local/xunsearch/data hightman/xunsearch:latest
#
FROM ubuntu:14.04
MAINTAINER hightman, hightman@twomice.net
# Install required packages
RUN apt-get update -qq
RUN apt-get install -qy --no-install-recommends \
wget make gcc g++ bzip2 zlib1g-dev
# Download & Install xunsearch-latest
RUN cd /root && wget -qO - http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 | tar xj
RUN cd /root/xunsearch-full-* && sh setup.sh --prefix=/usr/local/xunsearch
RUN echo '' >> /usr/local/xunsearch/bin/xs-ctl.sh \
&& echo 'tail -f /dev/null' >> /usr/local/xunsearch/bin/xs-ctl.sh
# Configure it
VOLUME /usr/local/xunsearch/data
EXPOSE 8383
EXPOSE 8384
WORKDIR /usr/local/xunsearch
RUN echo "#!/bin/sh" > bin/xs-docker.sh \
&& echo "rm -f tmp/pid.*" >> bin/xs-docker.sh \
&& echo "echo -n > tmp/docker.log" >> bin/xs-docker.sh \
&& echo "bin/xs-indexd -l tmp/docker.log -k start" >> bin/xs-docker.sh \
&& echo "sleep 1" >> bin/xs-docker.sh \
&& echo "bin/xs-searchd -l tmp/docker.log -k start" >> bin/xs-docker.sh \
&& echo "sleep 1" >> bin/xs-docker.sh \
&& echo "tail -f tmp/docker.log" >> bin/xs-docker.sh
ENTRYPOINT ["sh"]
CMD ["bin/xs-docker.sh"]
安装相关的PHP扩展包
首先通过 Composer 安装 xunsearch 扩展包:
composer require hightman/xunsearch
安装寻搜扩展包后,在Laravel中使用Scout也需要安装相应的扩展包:
composer require laravel/scout
将配置文件scout.php发布到config目录:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
在scout.php中添加xunsearch相关配置:
'xunsearch' => [
'host' => env('XUNSEARCH_HOST', '127.0.0.1'),
]
接下来需要修改.env中的相关配置:
SCOUT_DRIVER=xunsearch
XUNSEARCH_HOST=迅搜服务端IP地址
SCOUT_PREFIX=academy_
SCOUT_QUEUE=true
注意我们把SCOUT_DRIVER改成xunsearch,XUNSEARCH_HOST必须和你安装迅搜的服务器IP一致,最后我们设置索引构建通过队列异步执行。学院主使用Laravel Horizon实现队列系统。关于这个请移步对应文档查看内容,这里不再单独介绍。
学院暂时只支持文章search,所以需要在对应的model中添加如下代码来支持索引自动更新和搜索:
use Searchable;
索引配置文件
由于我们只是搜索college文章,我们只需要为其定义对应的索引配置文件,并在config目录下创建xs_article.ini:
project.name = academy_article
project.default_charset = utf-8
server.index = xunsearch服务端IP:8383 // 不配置的话默认为127.0.0.1:8383
server.search = xunsearch服务端IP:8384 // 不配置的话默认为127.0.0.1:8384
[pid]
type = id
[title]
type = title
[summary]
[content]
type = body
[tag_text]
type = both
[category_id]
type = numeric
index = self
[author]
index = both
[author_id]
type = numeric
[view_count]
type = numeric
[vote_count]
type = numeric
[comment_count]
type = numeric
[publish_time]
由您决定索引哪些字段。这只是一个参考。各领域的详细介绍请参考寻搜官方文档。我不会在这里重复它们。如果您想了解搜搜搜索引擎的工作流程和原理,请仔细阅读。迅索官方文档。
编写寻搜童子军扩展类
要实现基于迅搜驱动的搜索功能,还需要为其编写一个Scout扩展XunSearchEnginge:
<p>