web-dev-qa-db-ja.com

PHP / mySQLのGoogleのような検索エンジン

OCRedには数千ページの新聞記事があります。各ページの新聞、号、日付、ページ番号、OCRedテキストがmySQLデータベースに入れられました。

ここで、Googleのような検索エンジンをPHPで構築して、クエリで指定されたページを検索します。高速で、検索に1秒もかかりません。

どうすればいいの?

23
lkessler

SphinxSearch を試すこともできます。 Craigslistはsphinxを使用しており、mysqlとpostgresqlの両方に接続できます。

15
cnu

MySQLの全文検索がクエリごとに20秒かかる場合は、構成が間違っているか、パワー不足のハードウェアで実行されている-一部のbigサイトは、古いMyISAM検索を正常に使用しています。

しかし、私の投票は Solr です。それはLuceneに基づいているので、その最高の製品のすべての豊かさとパフォーマンスを得ることができますが、RESTful APIを使用して、非常に簡単に作成できます PHPからdW記事 もあります。

10
James Brady

興味深い検索エンジンがいくつかあります。 "Google like"の意味がわからないので、その部分は無視します。

  • Lucene エンジンを見てください。オリジナルは高性能ですが、Javaで記述されています。 LuceneからPHPへのポート (すでに他で言及されています)がありますが、遅すぎます。
  • Xapian Project を真剣に見てください。これは速い。これはC++で書かれているため、おそらくターゲットサーバー用にビルドする必要がありますが、PHPバインディングがあります。
10
Glenn

すべてのファイルをGoogleドキュメントに置いて、結果を独自のWebサイトにコピーすることができます。

私の懸念は、OCRの精度が依然として問題であることです。そのため、検索要件の1つの考慮事項は、「あいまい」検索を実行する機能です。 OCRが「暑い」という単語の「帽子」を誤って認識する場合のあいまいな意味、検索エンジンは、類似しているが正確ではない結果を返すのに十分なほど賢くなります。 Oracleには、2つの文字列の類似性を比較するUTL_MATCHという関数があります。 http://docs.Oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352

このような関数は役に立ちます。

4
Sun

Google検索アプライアンスやGoogle Enterpriseなどを試してみませんか?これにはコストがかかりますが、ホイールを再発明する必要がなくなり、「グーグルのような」検索が可能になります。

2
Pradeep

あなたのシナリオは、あなたがあなた自身を転がしたいことを示唆しています。一般的な検索エンジンの良い出発点は次のとおりです。

既製のソリューションを使用する場合:

2
Silver Dragon

これをチェックしてください Lucene PHPのポート:

1
CMS

Sphider を確認することをお勧めします。私の経験では、それは非常に高速であり、自動的に索引付けを行います。また、オープンソースであるため、コードを取得して、必要に応じて変更できます。

1
Darryl Hein

sqliteには非常に優れた全文検索機能があります(sqlite FTS 3/4を検索-驚くほど優れています)

単純なa PHP= diyアプローチが必要な場合は、インデックス化された用語のハッシュで分割された大量の小さなファイルを使用したインデックス作成が非常にうまく機能します。設計に注意してください(用語を検索するには、ハッシュとレコードIDに一致する用語を含む非常に小さなファイルを検索するだけで十分です。HDスペースを節約したい場合は、ビット配列スライスを使用してレコードIDを表すことができます)。 。しかし、フルテキストに対してすべてのWordのインデックス作成を行うと、phpでは遅くなります..その部分は実際にはcで行う必要があります

「ファジー」検索の場合、メタフォンハッシュの使用を検討することになります。

事前構築されたフルテキストツールについては、sqlite FTS 3/4(sqliteは非常に優れたフルテキスト検索機能を備えています!)、Sphinx、kinoSearch(kinoSearchはLuceneに少し似ていますが、バックエンドは素敵なPerlラッパーを備えています- cLuceneもありますが、それでもまだプレアルファだと思います)

Java Lucene(またはJavaベースの何か)は、JVMを実行するために脇に置くために多くのRAMを必要とするでしょう-予算に余裕があるならおそらくそれほど大きくはありません。

0
Michael MD