freento / fast-search-autocomplete
Freento 快速搜索自动完成
Requires
- php: ~8.0.0 || ~8.1.0 || ~8.2.0
This package is auto-updated.
Last update: 2024-09-05 11:26:21 UTC
README
Magento的自动完成功能工作相当慢。当用户在搜索框中输入文本时,他们期望几乎立即得到响应。此外,Magento不会将产品显示为搜索查询的结果。
模块目标 - 实现接近即时输入,大约50ms。
额外目标 - 将产品作为搜索查询的结果显示。
实现目标计划
- 放弃辅助SQL查询,仅使用Elastic实现。
- 避免额外的网络交互(Redis、SQL)。
- 避免使用Magento引导。
安装
- 安装模块:
composer require freento/fast-search-autocomplete
- 运行magento命令
bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:clean
- 为操作所需的属性采取您选择的操作
- 运行CLI命令
bin/magento freento:fsa:fillname
。 - 等待“freento_fastsearchautocomplete_fill_original_name”定时任务执行(它每天运行一次)。
- 运行CLI命令
- 重新索引或等待Magento自动执行。
模块操作模式
快速模式(直接Elastic)
所有Magento AJAX控制器查询相当慢,因为它们不会触发FPC,
- 通过Magento引导、composer自动加载。
- 需要从Redis或文件系统检索缓存数据。
- 执行大约十次MySQL查询。
例如,对于自动完成的最简单的本地Magento搜索查询,大约有30次Redis和10次MySQL查询,耗时135毫秒。
我们的模块有一个快速模式,它直接向Elasticsearch发送请求,而不调用Magento的引导。这是通过上传一个简单的脚本到服务器pub文件夹来实现的,该脚本负责高速操作。从Magento来的响应以毫秒计算。
演示:快速搜索自动完成演示
基本模块设置
- 将模块切换到“直接Elastic”模式。(商店 > 配置 > Freento > 快速搜索自动完成 > 一般 > 模式)
- 生成配置文件。(商店 > 配置 > Freento > 快速搜索自动完成 > 一般 > 生成搜索配置文件)
- 将扩展包的misc文件夹中的基本文件复制到pub文件夹(
pub/search_result.php
),该文件不引导Magento,但直接与Elasticsearch协同工作。 - 调整服务器配置以允许模块从第3步访问文件。例如,从nginx.conf中的示例
...
# PHP entry point for main application
location ~ ^/(index|get|static|errors/report|errors/404|errors/503|health_check|search_result)\.php$ {
try_files $uri =404;
fastcgi_pass fastcgi_backend;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
...
本地Magento模式
它的工作方式类似于“直接Elastic”模式,但涉及Magento的引导,这并不非常快,还会进行额外的MySQL和Redis查询。要切换到此模式,只需在“商店 - 配置 - 快速搜索自动完成”下选择“本地Magento”。
技术说明
属性
由于Elasticsearch将可配置产品和捆绑产品的名称存储为包含所有包含简单产品名称的字符串,因此添加了单独的属性来在结果中显示正常产品名称。当产品保存或通过定时任务freento_fastsearchautocomplete_fill_original_name
或通过运行CLI命令
bin/magento freento:fsa:fillname
.
不填充此属性,搜索将无法正常工作。
重定向到产品页面
要导航到产品页面,使用产品ID而不是直接链接。当点击结果时,它会重定向到一个控制器,根据产品ID(如果找不到产品,则为noroute页面)生成产品页面的URL,然后重定向到正确的页面。
快速模式详情
搜索发生在pub/search_result.php
文件中。如果您需要更灵活的Elastic请求规则,可以修改该文件,但通常不需要,自动生成的文件就足够了。Magento的索引器不存储产品URL。在弹出窗口中,有链接到一个中间控制器,当导航到该控制器时,确定正确的产品URL,并发生到正确页面的重定向。
该文件使用以下字段的生成配置文件。如果连接到Elasticsearch时出现任何错误,请检查此文件(var/freento-elastic-config.json
)。
配置文件示例
{ "hostname": "localhost", "port": "9200", "index": "magento2", "enableAuth": "0", "username": "", "password": "", "timeout": "15", "engine": "opensearch", "max_results_count": "10" }