全文検索エンジンの比較-Lucene、Sphinx、Postgresql、MySQL?


312

私はDjangoサイトを構築していて、検索エンジンを探しています。

いくつかの候補者:

  • Lucene / Lucene with Compass / Solr

  • スフィンクス

  • Postgresql組み込みの全文検索

  • MySQl組み込みの全文検索

選択基準:

  • 結果の関連性とランキング
  • 検索とインデックス作成の速度
  • 使いやすさとDjangoとの統合のしやすさ
  • リソース要件-サイトはVPSでホストされるため、理想的には検索エンジンが大量のRAMとCPUを必要としない
  • スケーラビリティ
  • 「もしかして?」、関連検索などの追加機能

上記の検索エンジン、またはリストにない他のエンジンでの経験がある人は誰でも-私はあなたの意見を聞きたいです。

編集:インデックス作成のニーズについては、ユーザーがサイトにデータを入力し続けると、それらのデータに継続的にインデックスを作成する必要があります。リアルタイムである必要はありませんが、理想的には新しいデータが15〜30分の遅延でインデックスに表示されます。


26
2¢:MySQLの全文検索とトランザクションは(現在)相互に排他的です。MySQLフルテキストインデックスには、トランザクションをサポートしないMyISAMテーブルタイプが必要です。(トランザクションをサポートするがフルテキストインデックスはサポートしないInnoDBテーブルタイプとは対照的です。)
Carl G

2
PostgreSQL全文検索。フレーズ検索Tsearch サポートされていません。ただし、TODOリストsai.msu.su/~megera/wiki/FTS_Todoには含まれています。
Gnanam

1
Djangoについてこれを確認している人は、haystackアプリをチェックアウトする必要があります。haystacksearch.org
Keyo


24
@CarlG、みんなの参考のために。MySQL 5.6+はinnodbエンジンで全文検索をサポート
DhruvPathak

回答:


167

Luceneについて誰かがうんざりしているのを見るのは良いことです。

一方、スフィンクスは私がよく知っているので、何か助けてくれるかどうか見てみましょう。

  • 結果の関連性ランキングがデフォルトです。必要に応じて独自の並べ替えを設定し、特定のフィールドに高い重みを付けることができます。
  • データベースと直接通信するため、インデックス作成速度は非常に高速です。速度が低下するのは、複雑なSQLクエリやインデックス付けされていない外部キーなどの問題が原因です。私も検索が遅いことに気づいたことはありません。
  • 私はRailsの人なので、Djangoで実装するのがどれほど簡単かわかりません。ただし、Sphinxソースに付属するPython APIがあります。
  • 検索サービスデーモン(searchd)のメモリ使用量はかなり少なく、インデクサープロセスが使用するメモリ量にも制限を設定できます。
  • スケーラビリティは私の知識がより大ざっぱなところですが、インデックスファイルを複数のマシンにコピーし、いくつかのsearchdデーモンを実行するのは簡単です。しかし、私が他の人から得た一般的な印象は、高負荷ではかなりすごいので、複数のマシンにまたがってスケールアウトすることは、対処する必要のあるものではありません。
  • 'did-you-mean'などのサポートはありません。ただし、これらは他のツールで十分簡単に​​実行できます。Sphinxは辞書を使用して単語をステムします。そのため、「運転」と「運転」(たとえば)は検索では同じと見なされます。
  • ただし、Sphinxはフィールドデータの部分的なインデックス更新を許可していません。これに対する一般的なアプローチは、最近のすべての変更でデルタインデックスを維持し、変更のたびに再インデックス付けすることです(そして、それらの新しい結果は1〜2秒以内に表示されます)。データ量が少ないため、これには数秒かかる場合があります。ただし、メインデータセットのインデックスを定期的に再作成する必要があります(ただし、データのボラティリティに依存する頻度は毎日ですか?毎時間ですか?)。ただし、インデックス作成の速度が速いため、これはかなり簡単です。

これがあなたの状況にどのように当てはまるかはわかりませんが、Evan Weaverがいくつかの一般的なRails検索オプション(Sphinx、Ferret(RubyのLuceneのポート)、およびSolr)を比較し、いくつかのベンチマークを実行しました。役に立つかもしれませんね。

私はMySQLの全文検索の深さを掘り下げていませんが、Sphinx、Lucene、またはSolrと速度的にも機能的にも競合しないことを知っています。


Sphinxでは、現在のインデックスのアイテムの個々の属性を更新できますが、レコード全体を削除/更新することはできません。
Xorlev、2010

sphinx RTでは、部分的な更新/削除を行うことができます。それは初期段階ですが、すでに[ほぼ]機能しています。sphinxsearch.com/wiki/doku.php?id=rt_tutorial
pQd

4
ここでのSolrの答えであるスフィンクスのこの回答への良いペアです
新アレクサンドリア

速度がSphinxに匹敵するものはないため、速度があなたの最大の関心事である場合は、Sphinxが最適です。いい投稿
twigg

Sphinx 2.3.2 Betaに、「CALL SUGGEST」と呼ばれる機能が追加されました。これは、「もしかして」の実装に使用できます。sphinxsearch.com/docs/devel.html#sphinxql-call-suggest
Vinod K

82

Sphinxは知りませんが、Luceneとデータベースの全文検索については、Luceneのパフォーマンスは他に例を見ないものだと思います。Luceneインデックスが正しく設定されていれば、検索するレコードの数に関係なく、ほとんどすべての検索を10ミリ秒未満で実行できるはずです。

ただし、最大のハードルはここにあります。個人的には、Luceneをプロジェクトに統合するのは簡単ではないと思います。もちろん、基本的な検索を実行できるように設定するのはそれほど難しくありませんが、最適なパフォーマンスで最大限に活用したい場合は、Luceneに関する優れた本が必要です。

CPUとRAMの要件については、Luceneで検索を実行してもCPUに大きな負荷はかかりませんが、データのインデックス作成は頻繁ではありませんが(1日に1回か2回)、そうではありません。多くのハードル。

すべての質問に答えるわけではありませんが、簡単に言うと、検索するデータが大量にあり、優れたパフォーマンスが必要な場合は、Luceneが間違いなく適していると思います。検索するデータがそれほど多くない場合は、データベースの全文検索を行うこともできます。私の本では、MySQL全文検索の設定は間違いなく簡単です。


10
sphinxと比較すると、明度は遅すぎてかさばります。私は自分のプロジェクトで両方を使用していましたが、ようやくスフィンクスにこだわりました。Lucenceはjavaで提供されており、Sphinxよりも多くのCPUとRAMを必要とします。
Phyo Arkar Lwin、2011

25
私はここで反対しなければなりません。正しいインデックスを作成すると、Luceneは非常に高速になります。基本的には、ほんの数ミリ秒で数百万のレコードに対して高度なクエリを実行できます。あなたは自分が何をしているかを知る必要があるだけです。そしてLuceneはJavaにいます... .NETポート、Lucene.NETもあります。
Razzie、2011

15
しかし、あなたはスフィンクスを使用しないことを明確に述べ、v3ssonは両方を使用しました。
user508546 2012年

20
あなたがスフィンクスを使用していないと述べているのと同じ文章で、luceneのパフォーマンスが比類のないものであることをどのように述べることができますか?
user508546 2012年

22
有効な質問。LuceneがSphinxより高速であると言ったことはありません。Luceneとデータベースの全文検索は他に例を見ないものだと述べました。そしてそうです。それについての質問はありません。Luceneは転置インデックスに基づいています。前述のように、私はSphinxを知りませんが、転置インデックスまたは同様のインデックス方法も使用している場合、それらが同等に機能している可能性があります。スフィンクスと比較してLuceneが「遅すぎてかさばる」とは、事実に基づくものではないと述べています。特に、Luceneが「Java」であるとだけ言われている場合は、パフォーマンスの点でとんでもない問題です。
Razzie

60

Solrに関する情報がこれ以上投稿されていないことに驚いています。SolrはSphinxに非常に似ていますが、より高度な機能を備えています(私はSphinxを使用していないため、AFAIK-読んでください)。

以下のリンクにある回答は、Solrにも適用されるSphinxに関するいくつかの詳細を説明しています。 全文検索エンジンの比較-Lucene、Sphinx、Postgresql、MySQL?

Solrは、以下の追加機能も提供します。

  1. レプリケーションをサポート
  2. 複数のコア(これらは独自の構成と独自のインデックスを持つ個別のデータベースと考えてください)
  3. ブール検索
  4. キーワードの強調表示(regex-fuを使用している場合は、アプリケーションコードでかなり簡単に実行できます。ただし、専用のツールでより良い仕事をさせてはどうですか)
  5. XMLまたは区切りファイルを使用してインデックスを更新する
  6. HTTP経由で検索サーバーと通信します(Json、ネイティブPHP / Ruby / Pythonを返すこともできます)
  7. PDF、Word文書のインデックス作成
  8. 動的フィールド
  9. ファセット
  10. 集計フィールド
  11. ストップワード、同義語など
  12. もっとこのように...
  13. カスタムクエリを使用してデータベースから直接インデックスを作成する
  14. 自動提案
  15. キャッシュ自動ウォーミング
  16. 高速なインデックス作成(MySQLフルテキスト検索のインデックス作成時間と比較)-Luceneはバイナリ逆インデックス形式を使用します。
  17. ブースティング(特定のキーワードやフレーズの関連性を高めるためのカスタムルールなど)
  18. フィールド検索(検索ユーザーが検索したいフィールドを知っている場合は、フィールドを入力してから値を入力して検索を絞り込みます。すべてではなく、そのフィールドのみが検索されます-ユーザーエクスペリエンスが向上します)

ところで、もっとたくさんの機能があります。ただし、本番環境で実際に使用した機能のみをリストしました。ちなみに、MySQLは最初から、上記のリストの#1、#3、および#11(制限付き)をサポートしています。あなたが探している機能については、リレーショナルデータベースはそれをカットするつもりはありません。私はそれらをすぐに排除します。

また、もう1つの利点は、Solr(実際にはLucene)がドキュメントデータベース(NoSQLなど)であるため、他のドキュメントデータベースの多くのメリットをSolrで実現できることです。言い換えれば、検索以外の目的(つまり、パフォーマンス)に使用できます。それを使ってクリエイティブになってください:)


Sphinxについてレプリケーションのサポート複数コアブール検索キーワードの強調表示XMLによるインデックスの更新-または区切りファイル-PDF、Word文書のインデックス作成(xmlによる)ファセットストップワード、シノニムなどカスタムクエリを使用してデータベースから直接インデックスを付ける自動推奨インデックス作成ブースティングフィールド化検索動的フィールドについて集計フィールドキャッシュ自動ウォーミングわからない
Moosh

58

Apache Solr


OPのクエリへの回答とは別に、簡単な紹介から詳細なインストール実装まで、Apache Solrに関するいくつかの洞察を投げかけましょう。

簡単な紹介


上記の検索エンジン、またはリストにない他のエンジンでの経験がある人は誰でも-私はあなたの意見を聞きたいです。

Solrは、リアルタイムの問題を解決するために使用すべきではありません。検索エンジンの場合、Solrはほぼゲームであり、問​​題なく動作します。

Solrは高トラフィックのWebアプリケーションで正常に動作します(これは適していないことをどこかで読みましたが、そのステートメントをバックアップしています)。CPUではなくRAMを使用します。

  • 結果の関連性とランキング

ブーストは、あなたの結果がトップに表示ランクに役立ちます。たとえばfirstnameおよびlastnameフィールドで名前johnを検索しようとしていて、firstnameフィールドに関連性を持たせたい場合は、次のようにfirstnameフィールドをブーストする必要があります。

http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john

あなたが見ることができるように、ファーストネームフィールドがされてブースト 2のスコアをアップ。

SolrRelevancyの詳細

  • 検索とインデックス作成の速度

スピードは信じられないほど速く、妥協はありません。私がSolrに引っ越した理由。

インデックス作成速度に関して、SolrはデータベーステーブルからのJOINSも処理できます。より高く複雑なJOINは、インデックス作成速度に影響します。ただし、巨大なRAM構成はこの状況に簡単に対処できます。

RAMが大きいほど、Solrのインデックス作成速度は速くなります。

  • 使いやすさとDjangoとの統合のしやすさ

SolrDjangoを統合しようとしたことはありませんが、Haystackを使用してそれを実現することができます。私は同じことに関していくつかの興味深い記事を見つけました、そしてそれはそれのためのgithubです。

  • リソース要件-サイトはVPSでホストされるため、理想的には検索エンジンが大量のRAMとCPUを必要としない

SolrはRAMで繁殖するため、RAMが高い場合でも、Solrについて心配する必要はありません。

数十億のレコードがある場合、Solrの RAM使用量はフルインデックス作成で急激に増加します。Deltaインポートをうまく活用して、この状況に対処できます。説明したように、Solr はほぼリアルタイムのソリューションにすぎません

  • スケーラビリティ

Solrは非常にスケーラブルです。上を見ていSolrCloudを。それのいくつかの主要な機能。

  • シャード(またはシャーディングは、インデックスが大きくなりすぎた場合など、複数のマシンにインデックスを分散させる概念です)
  • 負荷分散(SolrjをSolrクラウドで使用する場合、ラウンドロビンメカニズムを使用して自動的に負荷分散を処理します)
  • 分散検索
  • 高可用性
  • 「もしかして?」、関連検索などの追加機能

上記のシナリオでは、Solrに組み込まれているSpellCheckComponentを使用できます。多くの他の機能がありますが、SnowballPorterFilterFactoryは、レコードは、あなたが入力した場合、言っ取得するのに役立ちますブックの代わりに、この本は、あなたがに関連する結果が表示されますブック


この回答は、広くApache SolrMySQLに焦点を当てています。Djangoは対象外です。

LINUX環境を使用していると想定して、この記事に進むことができます。(私はUbuntu 14.04バージョンでした)

詳細なインストール

入門

ここからApache Solrをダウンロードします。バージョンは4.8.1です。あなたは新しいバージョンをダウンロードできます、私はこの安定版を見つけました。

アーカイブをダウンロードしたら、任意のフォルダに解凍します。言って.. Downloadsまたは何でも..だからそれは次のようになりますDownloads/solr-4.8.1/

プロンプトで..ディレクトリ内を移動します

shankar@shankar-lenovo: cd Downloads/solr-4.8.1

だから今あなたはここにいる..

shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$

Jetty Application Serverを起動します

Jettysolr-4.8.1ディレクトリのexamplesフォルダー内で使用できるため、その中を移動してJetty Application Serverを起動します。

shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar

ここで、ターミナルを閉じないでください、それを最小化して、脇に置いておきます。

(ヒント:&の後にstart.jarを使用して、Jettyサーバーをバックグラウンドで実行します)

Apache Solrが正常に実行されているかどうかを確認するには、ブラウザーでこのURLにアクセスしてください。http:// localhost:8983 / solr

カスタムポートでJettyを実行する

デフォルトでは、ポート8983で実行されます。ここで、またはjetty.xmlファイル内で直接ポートを変更できます。

java -Djetty.port=9091 -jar start.jar

JConnectorをダウンロードする

このJARファイルは、MySQLとJDBCの間のブリッジとして機能します。プラットフォームに依存しないバージョンをここからダウンロードします

ダウンロード後、フォルダを抽出してコピーmysql-connector-java-5.1.31-bin.jarし、libディレクトリに貼り付けます。

shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib

Apache SolrにリンクするMySQLテーブルを作成する

置くためにSolrを使用するには、検索するために、いくつかのテーブルとデータを持っている必要があります。そのために、MySQLを使用してテーブルを作成し、ランダムな名前をプッシュします。次に、Solrを使用してMySQLに接続し、そのテーブルとそのエントリにインデックスを付けます。

1.テーブル構造

CREATE TABLE test_solr_mysql
 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(45) NULL,
  created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
 );

2.上記の表に入力

INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');

コアの内部に入り、libディレクティブを追加する

1.移動する

shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf

2. solrconfig.xmlの変更

この2つのディレクティブをこのファイルに追加します。

  <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />

次に、DIH(データインポートハンドラー)を追加します。

<requestHandler name="/dataimport" 
  class="org.apache.solr.handler.dataimport.DataImportHandler" >
    <lst name="defaults">
      <str name="config">db-data-config.xml</str>
    </lst>
</requestHandler>

3. db-data-config.xmlファイルを作成します

ファイルが存在する場合は無視して、これらの行をそのファイルに追加します。最初の行を見るとわかるように、MySQLデータベースの資格情報を提供する必要があります。データベース名、ユーザー名、パスワード。

<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
    <document>
   <entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
      OR `created` > '${dataimporter.last_index_time}'" >
    <field name="id" column="rid" />
    <field name="solr_name" column="name" />
    </entity>
   </document>
</dataConfig>

(ヒント:エンティティはいくつでも持つことができますが、IDフィールドに注意してください。それらが同じである場合、インデックス作成はスキップされます。)

4. schema.xmlファイルを変更する

これを図のようにschema.xmlに追加します。

<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />

実装

索引付け

これが本当の取引です。Solrクエリを使用するには、MySQLからSolrへのデータのインデックス作成を行う必要があります

ステップ1:Solr管理パネルに移動する

ブラウザでURL http:// localhost:8983 / solrをヒットします。このように画面が開きます。

これはメインのApache Solr管理パネルです

マーカーが示すように、ロギングに移動して、上記の構成のいずれかがエラーを引き起こしていないかどうかを確認します。

ステップ2:ログを確認する

わかりましたので、あなたはここにいます。できる限り多くの黄色いメッセージ(警告)があります。赤でマークされたエラーメッセージがないことを確認します。以前の構成では、db-data-config.xmlに選択クエリを追加していました。たとえば、そのクエリにエラーがあった場合、ここに表示されます。

これは、Apache Solrエンジンのロギングセクションです

細かい、エラーはありません。行ってよかった。図のようにリストからcollection1を選択し、Dataimportを選択します

ステップ3:DIH(データインポートハンドラー)

DIHを使用すると、に接続されるのMySQLからSolrの構成ファイルをDB-データ-config.xmlのからのSolrインターフェースと上にインデックスを付けますデータベースから10レコードを取得してSolr

これを行うには、[ 全インポート]を選択し、[ クリーンアップコミット]オプションをオンにします。次に示すように、[ 実行 ]をクリックします。

または、このような直接のフルインポートクエリを使用することもできます。

http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true

データインポートハンドラー

[ 実行]をクリックすると、Solrはレコードのインデックス作成を開始します。エラーが発生した場合は、[ インデックス作成に失敗しました]と表示され、何が問題かを確認するには、[ ログ]セクションに戻る必要があります。

この構成にエラーがないと仮定し、インデックス作成が正常に完了した場合は、この通知が表示されます。

インデックス作成の成功

ステップ4:Solrクエリを実行する

すべてがうまくいったようですが、Solrクエリを使用して、インデックス付けされたデータをクエリできます。左側のクエリをクリックし、下部の実行ボタンを押します。

次のように、インデックス付けされたレコードが表示されます。

すべてのレコードをリストするための対応するSolrクエリは

http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true

インデックス付きデータ

さて、10個すべてのインデックス付きレコードがあります。たとえば、Jaで始まる名前だけが必要であるとします。この場合、列名をターゲットにする必要があるsolr_nameため、クエリは次のようになります。

http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true

Ja *で始まるJSONデータ

それがSolrクエリの書き方です。詳しくは、こちらの美しい記事をご覧ください


3
@Downvoter、この回答を自由にコメントまたは編集してください。反対投票の理由付けは他の人にも役立ちます。
Shankar Damodaran、2015年

4
これは私がSOで見た中で最も包括的でよく整理された投稿の1つです。素晴らしい仕事。
2016年

28

私は今、PostgreSQL全文検索を検討しています。これには、最新の検索エンジンのすべての適切な機能、非常に優れた拡張文字と多言語サポート、データベース内のテキストフィールドとの緊密な統合が備わっています。

ただし、+やAND(&|!を使用)などのユーザーフレンドリーな検索演算子がなく、ドキュメントサイトでの検索方法にわくわくしません。結果スニペットでは一致語が太字になっていますが、一致語のデフォルトアルゴリズムは適切ではありません。また、rtf、PDF、MS Officeのインデックスを作成する場合は、ファイル形式コンバーターを見つけて統合する必要があります。

OTOH、それは3文字以下の単語にインデックスを付けないMySQLテキスト検索よりもはるかに優れています。これはMediaWiki検索のデフォルトであり、実際にはエンドユーザーには不適切だと思います:http : //www.searchtools.com/analysis/mediawiki-search/

私が見たすべてのケースで、Lucene / SolrとSphinxは本当に素晴らしいです。それらは堅固なコードであり、使いやすさが大幅に改善されて進化したため、ほとんどすべての人が満足する検索を行うためのツールがすべて揃っています。

SHAILIの場合-SOLRにはLucene検索コードライブラリが含まれ、優れたスタンドアロンの検索エンジンとなるコンポーネントが含まれています。


1
PostgreSQLの全文検索では、あなたがを参照してTsearchいると思います。ただし、Tsearch フレーズ検索をサポートしていません。TODOリストsai.msu.su/~megera/wiki/FTS_Todoにまだ残っています。
Gnanam

1
Postgres 9.0全文検索で一連のテストを行ったところです。ユーザーがすべてのアクセントを正しく付けるのを忘れた場合、フランス語のテキストが一致しないことに失望しました。単語の形の一致は不規則です。たとえば、英語では、「say」は「said」を含むテキストと一致しません。ただし、テストされた言語(en、fr、ru)全体で統合された機能については、全体的にかなり印象的です。
ロマン・スターコフ

9
@romkyns:アクセントのない辞書をインストールして取り除く必要があります。
Denis de Bernardy、2011年

2
「OTOH、MySQLのテキスト検索よりもはるかに優れています。これは、3文字以下の単語にさえ索引付けしません。」これは、MySQLの組み込みの制限ではありません。設定ファイルで設定したものです。1文字の単語にインデックスを付ける場合は、構成の1つの値を変更するだけです。
カナック2012年

1
人々がまだ十分に調査していないデータベースを比較しているのではないかと心配しています。MySQLのCANの 3文字以内で索引語-あなただけのそれを適切に設定する必要があります。
TheCarver

22

この非常に古い質問に対する私の2セント。ElasticSearchをご覧になることを強くお勧めします

ElasticsearchはLuceneに基づく検索サーバーです。RESTful WebインターフェースとスキーマフリーのJSONドキュメントを備えた、分散型マルチテナント対応の全文検索エンジンを提供します。ElasticsearchはJavaで開発され、Apache Licenseの条件に基づいてオープンソースとしてリリースされます。

他のFTS(全文検索)エンジンに対する利点は次のとおりです。

  • RESTfulインターフェース
  • スケーラビリティの向上
  • 大規模なコミュニティ
  • Lucene開発者が作成
  • 豊富なドキュメント
  • 多くのオープンソースライブラリが利用可能です(Djangoを含む)

私たちはプロジェクトでこの検索エンジンを使用しており、非常に満足しています。


10

SearchTools-Aviは、「MySQLのテキスト検索は、3文字以下の単語にさえインデックスを付けません」と述べました。

ちなみに、MySQLフルテキストの最小語長は、少なくとも MySQL 5.0 以降調整可能です。簡単な説明については、Googleの「mysql fulltext min length」。

そうは言っても、MySQLフルテキストには制限があります。1つは、100万件程度のレコードに達すると更新が遅くなることです...


2

リストにmnoGoSearchを追加します。Googleとして機能する非常に高性能で柔軟なソリューション:インデクサーは複数のサイトからデータをフェッチします。基本的な基準を使用するか、独自のフックを発明して最高の検索品質を実現できます。また、データベースから直接データをフェッチすることもできます。

ソリューションは今日ではあまり知られていませんが、最大のニーズに対応します。コンパイルして、スタンドアロンサーバーまたはプリンシパルサーバーにインストールすることもできます。Cで記述されており、小規模サーバーでも完全に実行されるため、Solrほど多くのリソースを必要としません。

最初は自分でコンパイルする必要があるため、ある程度の知識が必要です。Debian用の小さなスクリプトを作成しました。調整は大歓迎です。

あなたはDjangoフレームワークを使用しているので、または途中でPHPクライアントを使用したり、Pythonで解決策を見つけたりすることができました。いくつかの 記事を見ました。

そしてもちろん、mnoGoSearchはオープンソースのGNU GPLです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.