Windsearch

windsearch,PHP原生实现的全文检索引擎,无任何复杂的安装配置,开箱即用,可承受百万至千万的数据。零安装配置、零心智负担,拥有强大的算法,包含多种检索模式,集成到PHP项目后,无需维护,一劳永逸

本搜索引擎适合外贸独立站、垂直社区、区域性电商、cms系统、PHP开发工作室、服务器配置一般的网站、需要快速搭建搜索的网站、个人博客等。

github地址:https://github.com/rock365/windsearch

在线文档:https://rock365.github.io/ 偶尔无法访问,多刷新几次就行

它的优势是什么?

易用性:完全零配置(你没有听错),没有任何繁杂臃肿的安装设置,一行代码就能搭建完成;完全接口化操作;文档详细,复制粘贴就能实现各种搜索场景。

安全:完全本地化部署,所有代码完全有您掌握;

PHP原生友好:windsearch是纯PHP开发的,能跟PHP项目无缝集成,不会产生跨语言调用的性能损耗;

零运维成本:不会产生任何维护调优的成本,只要网站正常运行,搜索引擎就能一直运行,永不宕机;

性能强悍:百万级数据毫秒级响应,千万级数据面不改色,且拥有多种搜索模式;

极高性价比:磁盘式搜索引擎,对服务器内存资源占用极小,可大幅降低服务器成本;

PHP环境要求:

  • UTF-8编码
  • PHP ≥7.3
  • mbstring Extension
  • PDO Extension
  • SQLite Extension

多种搜索模式

match 单字段检索

multi_match 多字段检索

match_fuzzy 模糊搜索

match_prefix 前缀匹配

match_suffix 后缀匹配

match_prefix_suffix 前后缀混合匹配

match_phrase 短语搜索

match_terms 精确搜索

match_bool 布尔搜索(无限嵌套)

match_range 范围查询

match_all 查询所有数据

match_rand 随机获取数据

match_primarykey 根据主键查询数据

match_geo 地理空间搜索

match_auto_completion 自动补全

其它功能

aggs 聚合查询:分组聚合、指标聚合、分组嵌套聚合;

搜索统计:可对前台用户的搜索数据进行保存统计,可按年、按月、按日来查看搜索词语的频率统计数据;

敏感词检测:包括一键导入所有敏感词,检测字符串是否存在敏感词、检测并替换敏感词、返回所有包含的敏感词;

亮点介绍

操作完全接口化;

原生支持中文分词;

支持配置同义词;

支持自定义分词插件;

支持精细化搜索设置;(结果高亮、自定义返回字段、字段权重、minimum_should_match、结果按字段值排序、数据脱敏返回等)

支持生成增量索引并合并到主索引;

支持实时索引;

支持搜索结果filter过滤;

支持搜索结果按字段值排序;(按某个字段值排序、按距离排序(如果存在经纬度字段))

更合理的排序:

综合排序时,命中的词语之间越紧密,排序越靠前,例如:

1,xxxx明天xxxx会xxxxxxx更好

2,xxx明天会更好xxxxxxx

排序后,2会在1前面

支持int递增主键、uuid主键;

多字段检索语法示例

// 搜索多个字段
$query = [
    'multi_match' => [
        'field' => [
            [
                'name' => 'title',
                'query' => $query,//搜索内容
                'analyzer' => 'segment', // 词典分词模式 complete/not,代表整体匹配; segment 中文分词; 
                'highlight' => [ // 结果高亮
                    'is_cut' => true, // 是否将未匹配的地方截取掉
                    'fixed_length' => '', // 保留多少字符,若为空,则保持原长度
                ],
            ],
            [
                'name' => 'tags',
                'query' => '蔬菜',
            ]

        ],
        // 结果排序 为空时,自动按命中个数倒排
        'sort' => [
            'time' => 'asc' //asc 按字段值正序 desc 按字段值倒序
        ],
        'list_rows' => $listRows, // 每页多少条数据
        'page' => $page, // 第几页

    ]
];

// 搜索接口
$res = $Wind->search($query);
// $res 返回的最终结果,可直接渲染到前台页面
// ...

地理空间检索语法示例

// 地理空间搜索
$query = [
    'match_geo' => [
        'field' => [
            'name' => 'location', // 要进行搜索的字段,类型必须为geo_point
            'geo_point' => [
                'lat' => '30.621900130545825', //纬度
                'lon' => '114.28891807367313', //经度
            ],
            // 'distance' => '10000m', // 10公里范围内
            'distance' => ['10km', '20km'], // 1公里到10公里范围内
        ],
        // 结果排序
        'sort' => [
            'geo_distance' => 'asc' //asc 按距离升序 desc 按距离降序
        ],
        '_source' => ['title', 'descr'],//自定义返回字段
        'list_rows' => $listRows, //每页多少条数据
        'page' => $page, //第几页
    ]
];

// 搜索接口
$res = $Wind->search($query);
// $res 返回的最终结果,可直接渲染到前台页面
// ...

搜索过滤语法示例

搜索可以添加强大的filter过滤功能,可以过滤geo距离,数值,关键词,日期。

// 搜索单个字段
$query = [
    'match' => [
        'field' => [
           // 此处为搜索字段信息...
        ],
        
        //筛选过滤
        'filter' => [
            'conditions' => [
                //地理位置过滤
                'location' => [
                    // 过滤条件...
                ],
                
                // 数值过滤
                'score' => [
                    // gt、gte、lt、lte
                    
                ],
                
                // 主键过滤
                // ...
                
                // 时间字段过滤
                'time' => [
                    // 支持时间戳、字符串
                    'gte' => '2024-03-10',
                    'lt' => '2024-03-15',
                ],
                
                //字符串过滤
                'area'=>[
                    // 支持完全匹配、前缀匹配、后缀匹配
                    'match' => ['中国','澳大*']
                ]

            ],
        ],
        
        
        // 结果排序 为空时,自动按命中个数倒排
        'sort' => [
            'time' => 'desc' //asc 按字段值正序 desc 按字段值倒序
        ],
        'list_rows' => $listRows, //每页多少条数据
        'page' => $page, //第几页

    ]

];

// 搜索接口
$res = $Wind->search($query, $page, $listRows);
// 返回的最终结果,可直接渲染到前台页面
$resArr = $res['result'];

检索引擎的使用不应该占据开发人员太多时间,windsearch所有的操作都已经接口化,照着文档填写调用即可,简单到不能再简单。引擎内部包含多种数据结构跟算法,但你无需关注任何东西,直接使用它就行。

所有的搜索语法跟ES大差不差,但更清晰简洁。对网站配置几乎没有什么要求(毕竟内存的成本还是挺高的),无需配置任何东西,导入即可使用,无需维护,能跟PHP项目完美融合。


会飞的鸟
4 声望1 粉丝

v: azg555666