在Symfony中为静态内容创建搜索工具的最佳方法是什么?

时间:2015-04-29 08:45:25

标签: symfony

我使用Symfony 2.6构建了一个静态网站,它已被翻译成8种不同的语言,并包含多种形式。

现在需要一个搜索工具,实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

可以使用以下方式获取搜索工具:

  • 特殊数据库请求,在mysql SELECT * FROM article WHERE article.body LIKE '%searched_query%'
  • 可以使用以下工具实现全文搜索:

    但在这两种情况下,您都应将内容保存在数据库或其他文件中。

  • 在您的情况下,作为解决方法,我建议抓取您自己的网站,并从您找到搜索文本的网站返回链接

    use Symfony\Component\DomCrawler\Crawler;
    
    class InternalCrawler {
    
        private $crawler;
        private $textToSearch;
        private $matchedUrls;
    
        public function __construct($textToSearch)
        {
            $this->textToSearch = $textToSearch;
        }
    
        protected function requestUrl($url)
        {
            //curl the url to crawl
            //...
    
            return $html;
        }
    
        protected function getUrlsToCrawl()
        {
            return array(
                'url-to-homepage',
                'url-to-an-article-page',
                ...
            );
        }
    
        protected function match($url, $html)
        {
            $this->crawler = new Crawler($html);
            $textExists = $this->crawler->filter("html:contains('{$this->textToSearch}')")->count();
            if ($textExists) {
                $this->matchedUrls[] = $url;
            }
        }
    
        public function getMatchedUrls()
        {
             foreach ($this->getUrlsToCrawl() as $url) {
                 $html = $this->requestUrl($url);
                 $this->match($url, $html);
             }
    
             return $this->matchedUrls;
        }
    }
    

因此,您将获得与您的搜索文本匹配的urls列表。