4

Doctrine 2 を使用しており、通常はフィールドにフルテキストを設定するかなり単純な検索要件があります。私は良いグーグルを持っていましたが、Doctrineでこれを行う方法はないようです.

このプロジェクトでは Zend Framework 2 を使用していますが、何か良い回避策を考えている人はいないのでしょうか?

クエリで多くの LIKE を使用しても十分に高速な検索結果が得られるとは思いませんが、同時に Solr や Elastic search などを使用すると、単純な方法で 1 つのフィールドだけを検索するには過剰すぎると思います。

助言がありますか?一緒に何かをハックしなければならないと感じています。現在、コマンドラインから orm:schema:create ツールを実行してデータベースを作成しています。

助言がありますか?

4

1 に答える 1

3

簡単に言えば、Doctrine2 に固執し、LIKE クエリを使用したくない、検索エンジンを導入したくない場合、解決策はありませ

Doctrine2 は InnoDB に依存しており、InnoDB (現在) はフルテキストをサポートしていません。したがって、全文または LIKE クエリに焦点を当てることは、私が言うオプションではありません。ただし、どちらも Lucene をエンジンとして使用しているため、Solr や ElasticSearch を使用するよりもはるかに簡単な方法があります。ファイル システム (プロジェクト ディレクトリ内) に Lucene インデックスを作成し、ZendSearchインデックス作成とクエリに使用できます。

composer 経由で要求zendframework/zendsearchし、検索のためにこれを行います。

use ZendSearch\Lucene\Lucene;
use ZendSearch\Lucene\Document;
use ZendSearch\Lucene\Document\Field;

// this is relative to your project say /var/www/site/data/search
$dir = 'data/search';

// Create index
Lucene::create($dir);

// Insert a new document
$index = Lucene::open($dir);
$doc   = new Document;

$doc->addField(Field::keyword('foo', 'bar'));
$index->addDocument($doc);

// Search the index
$index  = Lucene::open($dir);
$result = $index->query('foo:bar');

echo count($result);

検索をサポートするためにサーバーにバイナリ (Solr や ElasticSearch など) をインストールする必要はありません。全文検索よりもさらに高速ですが、適切な検索をサポートするには、もちろんインデックスを最新の状態に保つ必要があります。

于 2013-07-11T20:05:24.387 に答える