3

スペル修正や「近い」結果などの高度な機能をサポートする、データベース内の列を指すことができる検索エンジンを探しています。

今、私はちょうど使用しています

SELECT <column> from <table> where <colname> LIKE %<searchterm>%

特にユーザーがアイテムのスペルを間違えた場合、いくつかの結果が欠落しています。

スペルチェッカーを実行してスペルミスを修正するコードをいくつか書きましたが、すぐに使用できるより優れたオプションがあるかもしれないと考えました。Google はサイト全体をインデックス化して検索するための多くのオプションを見つけましたが、実際にはこの 1 つのテーブル列をインデックス化して検索するだけで済みます。

4

3 に答える 3

3

Apache Solr は、(1) N-Gram インデックス (完全な文字列だけでなく、部分文字列も検索します。これは、同様の結果を得るのに非常に役立ちます) を提供する優れた検索エンジンです。 (2) 距離に基づいてすぐに使えるスペル コレクターを提供しますmetric/edit distance (これは、ユーザーが「chicaog」と入力したときに「did you mean chicago」を取得するのに役立ちます) (3) すぐに使えるあいまい検索オプションを提供します (あいまい検索は、あなたのたとえば、ユーザーが GA-123 と入力すると、結果として VMDEO-123 が返されます) (4) Solr は、上記のオプションのように役立つ「More Like This」コンポーネントも提供します。

Solr (Lucene Search Library に基づく) はオープン ソースであり、ゆっくりと検索 (バーティカル) 業界のデファクトになりつつあり、データベース検索に優れています (データベース列のインデックス作成について話したように、これは Solr にとって簡単なことです)。 )。Lucene と Solr は、多くのフォーチュン 500 企業やインターネットの巨人によって使用されています。

Sphinx Search Engine も優れています (すべてのフットプリントが非常に小さく、C++ ベースであるため、私も気に入っています) が、簡単に言えば、Solr の方がはるかに人気があります。

Python のサポートと API が両方で利用できるようになりました。ただし、Sphinx は exe で、Solr は HTTP です。したがって、Solr の場合は、python プログラムから Solr URL を呼び出すだけで、レンダリングのためにフロントエンドに送信できる結果が返されます)。

ここまでは順調ですね。あなたの質問に来ます:

まず、検索エンジンが本当に必要かどうかを自問する必要があります。検索エンジンは、上記のすべてのユース ケースに適していますが、実際には、膨大な量の全文データや数百万行の表形式データを検索するために作られています。Did you Mean、Similar Records、Spell Correctors などのアルゴリズムを上に書き込むことができます。Solr でゼロ化する前に、Google で (1) Peter Norvig Spell Corrector & (2) N-Gram Indexing も検索してください。数行のコードを書くだけで、探していたものを実際に手に入れることができるかもしれません。

決めるのはあなた次第です:)

于 2012-06-18T17:38:37.707 に答える
1

Sphynx Search などのオープン ソース テクノロジを検討することをお勧めします。

于 2012-06-18T16:40:44.660 に答える
0

全文索引作成のために Solr/Sphinx ルートをたどる前に (複雑さと独自のオーバーヘッドが追加されます)、そのデータベースを使用している場合は、PostgreSQL に組み込まれている全文エンジンを試すことができます。LIKEセットアップが簡単で、クエリよりも優れたパフォーマンスを発揮します。

https://github.com/hcarvalhoalves/django-tsearch2をご覧ください

于 2012-06-18T18:54:04.077 に答える