2023
查看旧档案一个>
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
欧宝娱乐app下载地址Symfony的会议
欧宝娱乐app下载地址Symfony拥有有史以来为开源项目编写的最大的文档池之一。欧宝体育电话考虑到十个不同的Symfony版本(从2.0到master)欧宝娱乐app下载地址,并包括代码示例,Symfony文档大约有360万字,是整个哈利波特系列字数的三倍多。欧宝体育电话
但是,我们的文档内容不使用欧宝体育电话实体,所以我们使用了低级的实体<一个href="https://www.algolia.com/doc/php" class="reference external" rel="external noopener noreferrer" target="_blank">Algolia PHP API一个>.这需要自己创建索引对象,并相应地更新它们,以保持索引的更新。
将索引对象看作存储在索引中的独立信息单元,可以作为搜索结果显示。这些对象可以存储应用程序所需的或多或少的内容。
例如,这些是本书/ testing.rst文件,对应Symfony Book中的测试章节:欧宝娱乐app下载地址
本书/ testing.rst
12 3 4 5 6 7 8 9 10 11 12 13 14 15
测试=======每当您编写新的代码行时,您也可能会添加新的错误。为了构建更好、更可靠的应用程序,应该同时使用功能测试和单元测试来测试代码。PHPUnit测试框架----------------------------- Symfony集成了一个名为PHPUn欧宝娱乐app下载地址it的独立库,为您提供了一个丰富的测试框架。本章不会涉及PHPUnit本身,但它有自己优秀的“文档”_。欧宝体育电话[…]
您将创建多少对象来索引此内容?我们创建了四个:一个用于每个节标题,一个用于每个节内容(在本例中只是一个段落)。对象的索引对象的PHP数组测试节标题:
测试
1 2 3 4 5 6 7 8 9 10 11
数组(“标题”= >“测试”,“内容”= >'',“面包屑”= >数组(“lvl1”= >“书”),“type_of_content”= >“书”,“url”= >“https://欧宝娱乐app下载地址www.oldmanjams.com/doc/current/book/testing.html主”,“版本”= >“3.0”,“重要性”= >0,)
类似地,这是' Testing '标题下面内容的索引对象:
12 3 4 5 6 7 8 9 10 11 12
数组(“标题”= >“测试”,“内容”= >“每当你写了一行新的……”,“面包屑”= >数组(“lvl1”= >“书”,“lvl2”= >“测试”),“type_of_content”= >“书”,“url”= >“https://欧宝娱乐app下载地址www.oldmanjams.com/doc/current/book/testing.html主”,“版本”= >“3.0”,“重要性”= >4,)
索引对象的属性可以自由选择,您还可以决定索引哪些属性,如何使用它们来执行搜索查询等等。除了基本的标题,内容,面包屑而且url属性,我们包括type_of_content(将Symfony Book与烹饪书、包等区欧宝娱乐app下载地址分开来)版本Sym欧宝娱乐app下载地址fony和重要性,以衡量每份内容的相关性(0为h1冠军,1为h2冠军,4以下内容h1标题,等等)。
标题
内容
面包屑
url
type_of_content
版本
重要性
0
h1
1
h2
4
这些索引对象的粒度可能看起来像是一种负担,但它对于显示高度相关的搜索结果至关重要。我们总共创建了116,513个对象来索引所有Symfony版本的整个文档,大致相当于每个对象30个单词。欧宝体育电话欧宝娱乐app下载地址
一旦对象建立了索引,就已经有了一个随时可用的搜索索引。然而,仍有一些小的调整,以改善用于生成搜索结果的算法。在我们的例子中,这些调整是由Algolia的开发者做出的,他们总是愿意帮助我们,并提供非常高质量的支持。
12 3 4 5 6 7 8 9 10 11 12 13
//对搜索框中输入的每个字符执行查询searchInput.on美元(“弹起”,函数(事件){var查询= $(这) .val ();algoliaHelper.setQuery(查询).search ();}) .focus ();//显示前一个查询的搜索结果algoliaHelper.on (“结果”,函数(内容,状态){renderHits(内容);renderFacets(内容、状态);renderPagination(内容);/ /……});
请注意
在实现接口后不久,Algolia发布了<一个href="https://community.algolia.com/instantsearch.js/" class="reference external" rel="external noopener noreferrer" target="_blank">InstantSearch.js一个>,一个基于小部件的库,它允许以更快的方式完成与helper相同的操作。
接下来,我们研究了允许基于内容类型和Symfony版本优化搜索结果的“facet”或过滤器。欧宝娱乐app下载地址您可以独立地设置任何过滤器,因此它们被认为是“析取facet”。多亏了JavaScript助手,你只需要在执行搜索查询之前调用一个方法来设置/取消这些方面:
algoliaHelper。一个ddDisjunctiveFacetRefinement(facetName, facetValue).search();
我们面临的唯一问题是无法通过Algolia API获得facet名称和值。解决方案是在加载搜索页面时执行空查询,并从空搜索结果中提取facet。这个技巧也很有用当前的欧宝娱乐app下载地址Symfony版本预选在过滤器:
当前的
1 2 3 4 5 6
//空查询来获取facet名称和值algoliaHelper .addDisjunctiveFacetRefinement (“版本”,“当前”) .setQuery ('') .search();
最后,使用。创建的JavaScript模板呈现搜索结果<一个href="https://github.com/janl/mustache.js" class="reference external" rel="external noopener noreferrer" target="_blank">mustache.js一个>.如果你习惯了像Twig这样的高级模板引擎,你会发现mustache.js非常有限,但幸运的是,搜索引擎模板很简单:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<!--the template used to render the search results --><脚本类型=“文本/模板”id=“hit-template”>{{#支安打}}<!--equivalent to {% if hits %} --><div类=“打”><div类=“hit-content”>{{#标题}}<div类=“hit-title”><!--{{{foo}}}等于{{foo|raw}}--><一个href="{{url}}">{{{title}}}一个>div>{{/标题}}...div>{{/支安打}}脚本>
yaml的语法
文件上传-doctrine
内容每天重新索引一次,搜索索引在全球14个地点复制,因此无论您住在哪里,都可以立即得到响应。
试试这个新的搜索引擎<一个href="//www.oldmanjams.com/search" class="reference external">欧宝娱乐app下载地址www.oldmanjams.com/search一个>并分享你的想法。
帮助Symfony欧宝娱乐app下载地址项目!
与任何开源项目一样,<一个href="//www.oldmanjams.com/doc/current/contributing.html">贡献一个>代码或文档是最常欧宝体育电话见的帮助方式,但我们也有广泛的<一个href="//www.oldmanjams.com/sponsor">赞助机会一个>.
Gábor Egyed is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Javier Eguiluz is a certified Symfony engineer.
Quentin Fahrner is a certified Symfony engineer.
为了确保评论保持相关性,旧帖子将被关闭。