Kirby 的模糊搜尋插件。在您的內容中尋找搜尋查詢的近似匹配從未如此簡單。
該插件構建在 fuzzget PHP 庫之上。
如果您已經在使用 Kirby 內建search
方法,將其替換為模糊搜尋只需在頁面集合上重命名方法即可:
$query = get('q');
$articles = page('blog')
->children()
->visible()
- ->search($query, 'title|text');
+ ->fuzzySearch($query, 'title|text');
模糊搜尋與 Kirby search
方法中可用的任何其他選項都不相容。
使用模糊搜索,您還可以透過自訂頁面方法或頁面模型進行搜尋。您只需在fuzzySearch
最後一個參數中包含方法名稱即可。
// site/plugins/methods.php
page:: $ methods [ ' authorName ' ] = function ( $ page ) {
$ author = $ page -> author ()-> value ();
if ( $ user = site ()-> user ( $ author )) {
return $ user -> firstname (). ' ' . $ user -> lastname ();
}
};
$ query = get ( ' q ' );
$ articles = page ( ' blog ' )
-> children ()
-> visible ()
-> fuzzySearch ( $ query , ' title|text|authorName ' );
模糊搜尋附帶了一種方便的字段方法,可讓您搜尋包含資料集的頁面字段,例如結構化字段。
$ result = page ( ' faq ' )
-> topics ()
-> fuzzySearch ( $ query , ' question|answer ' );
$result
也將是一個Field
對象,而不僅僅是一個簡單的陣列。這樣,在執行搜尋後,您可以自由連結任何Field
方法,例如toStructure
、 yaml
或isEmpty
。
$ result = page ( ' contact ' )
-> addresses ()
-> fuzzySearch ( $ query , ' city ' )
-> toStructure ();
您也可以使用fuzzySearch
函數來搜尋關聯數組的陣列。
$ countries = [
[ ' name ' => ' Australia ' ],
[ ' name ' => ' Brazil ' ],
[ ' name ' => ' Canada ' ],
[ ' name ' => ' France ' ],
[ ' name ' => ' Germany ' ],
[ ' name ' => ' Portugal ' ],
[ ' name ' => ' United Kingdom ' ],
[ ' name ' => ' United States ' ]
];
$ results = fuzzySearch ( $ countries , ' Brasil ' );
如果省略最後一個參數,模糊搜尋將搜尋所提供資料中的所有鍵(欄位):
site ()-> index ()-> fuzzySearch ( $ query );
這與使用*
通配符相同。
site ()-> index ()-> fuzzySearch ( $ query , ' * ' );
模糊搜尋在選擇應查找匹配項的欄位時非常靈活。看其他選項:
如果您只想在title
和text
欄位中搜尋給定術語,只需在最後一個參數中傳遞它們的名稱,並用|
分隔。 :
site ()-> index ()-> fuzzySearch ( $ query , ' title|text ' );
這是語法糖:
site ()-> index ()-> fuzzySearch ( $ query , [
' include ' => [ ' title ' , ' text ' ]
]);
當然你也可以列出你不想搜尋的欄位:
site ()-> index ()-> fuzzySearch ( $ query , ' -author|-date ' );
上面的操作與執行以下操作相同:
site ()-> index ()-> fuzzySearch ( $ query , [
' ignore ' => [ ' author ' , ' date ' ]
]);
在此範例中,搜尋中將考慮除author
和date
之外的所有欄位。
如果需要包含自訂頁面方法或頁面模型方法,可以將其與通配符和忽略語法結合使用。
site ()-> index ()-> fuzzySearch ( $ query , ' *|authorName|-date ' );
上面將包括除date
之外的所有欄位以及$page->authorName()
,以防它是自訂頁面方法或頁面模型方法。
下載檔案並將它們放在site/plugins/fuzzy-search
中。
Kirby 的命令列介面讓安裝模糊搜尋外掛變得輕而易舉:
$ kirby plugin:install pedroborges/kirby-fuzzy-search
更新再簡單不過了,只要運行:
$ kirby plugin:update pedroborges/kirby-fuzzy-search
您可以將模糊搜尋插件新增為 Git 子模組。
$ cd your/project/root
$ git submodule add https://github.com/pedroborges/kirby-fuzzy-search.git site/plugins/fuzzy-search
$ git submodule update --init --recursive
$ git commit -am "Add Fuzzy Search plugin"
更新就像運行幾個命令一樣簡單。
$ cd your/project/root
$ git submodule foreach git checkout master
$ git submodule foreach git pull
$ git commit -am "Update submodules"
$ git submodule update --init --recursive
此專案的所有顯著變更將記錄在:https://github.com/pedroborges/kirby-fuzzy-search/blob/master/changelog.md
模糊搜尋插件是根據 MIT 許可證授權的開源軟體。
版權所有 © 2017 佩德羅·博爾赫斯 [email protected]