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]