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項目完美融合。