Zend で完全に開発された CMS を使用して管理されているサイトがあります。ここで、検索機能も実装する必要があります。zend での検索に関連することは何もしていません。私が受け取ったいくつかの提案は、スパイダーを実装することです。サイトにはたくさんのリンクがあります (そして、追加し続けます)。私は完全に混乱しており、どこから始めればよいかわかりません。zend_search_lucene でうまくいくでしょうか?
3 に答える
あなたはおそらくこれのために完全にターンキーなものを見つけるつもりはないでしょう。コンテンツがすべて公開されていて、クローラーを使用するだけで問題がない場合、実装するのが最も簡単なのはGoogleサイト検索です。
http://www.google.com/enterprise/search/products_gss.html
これでは提供されないさまざまな機能を検索から取得する必要がある場合は、コードの実行に行き詰まる可能性があります。Alvarが投稿したZendLuceneのリンクは優れています。Zend_Luceneの醜い点の1つは、私が誤解していない限り、Javaを使用せずにテキストベースのluceneインデックスに依存していることです。管理が遅く、面倒です。
より堅牢なLuceneベースのアプローチはSolrです。これはJavaベースであり、APIを使用して独自のサービスで実行されます。それはうまくスケーリングし、あなたがそれと通信するのを助けるPHPPeclが今出ています。
http://php.net/manual/en/book.solr.phpを参照してください
別のオプションはSphinxです。この検索エンジンはデータベースに直接接続されるため、インデックス作成はもう少し直感的になる可能性があります。
頑張って!
Lucene は奇妙です。適切に動作させることができず、独自の検索ロジックを開発しましたが、これが役立つかもしれません。
http://devzone.zend.com/397/roll-your-own-search-engine-with-zend_search_lucene/
自家製の製品を使用しているため、少なくとも最初のうちは、物事をできるだけシンプルに保つ方がよいでしょう。また、製品は自家栽培であるため、データ構造を適切に処理する必要があります。
簡単なクエリベースの検索を構築することは、初心者にとって適切なものかもしれません。
簡単な検索フォームから始めました。
<?php
class Application_Form_Search extends Zend_Form
{
public function init() {
$this->setMethod('POST');
$this->setDecorators(array(
array('ViewScript', array(
'viewScript' => '_searchForm.phtml'
))
));
// create new element
$query = $this->createElement('text', 'query');
// element options
$query->setLabel('Search Keywords');
$query->setAttribs(array('placeholder' => 'Title',
'size' => 27,
));
// add the element to the form
$this->addElement($query);
$submit = $this->createElement('submit', 'search');
$submit->setLabel('Search Site');
$submit->setDecorators(array('ViewHelper'));
$this->addElement($submit);
}
}
次に、フォームを表示してルーティングする単純なアクション ヘルパーを作成しました。
<?php
class Library_Controller_Action_Helper_Search extends Zend_Controller_Action_Helper_Abstract
{
public function direct($action, $label = null, $placeHolder = null)
{
$form = new Application_Form_Search();
$form->setAction($action);
$form->search->setLabel($label);
$form->query->setAttribs(array('placeholder' => $placeHolder,
'size' => 27,
));
return $form;
}
}
次に、layout.phtml に検索フォームのプレースホルダーを追加しました。
<?php echo $this->layout()->search ?>
次に、検索機能を使用する必要があるコントローラーで、ヘルパーを predispatch() に追加します。
public function preDispatch()
{
//assign search action helper to view placeholder
$this->_helper->layout()->search = $this->_helper->search(
'url_for_action', 'Submit button label', 'placeholder text'
);
}
次に、単純なマッパー メソッドを使用して適切なクエリを実行し、通常はページネーター アダプターを返します。
public function fetchPagedMoviesByTitle($title)
{
$select = $this->getGateway()->select();
$select->where(new Zend_Db_Expr("title LIKE '%$title%'"));
$select->order('title', 'ASC');
//create a new instance of the paginator adapter and return it
$adapter = new Video_Model_Paginator_Video($select);
return $adapter;
}
これは、検索機能を実装する簡単な方法であり、ほとんどの種類のクエリに適応できます。switch ステートメントといくつかの単純なデータベース クエリ、および必要なほぼすべての情報が利用可能であることがわかりました。
幸運を。