4

MySQLとPHPを使用して、自分のWebサイトの簡単な検索機能を作成しています。現在、検索バーに「猫」という単語を入力すると、「猫」という単語を含む記事を取得できなくなります。その逆も同様です。エンディング「ed」も同じです。

この問題を解決するために私が考えることができる唯一の方法は、特定の長さより長い各単語の末尾からすべての「s」と「ed」を削除することです(「Ted」が「T」に変わるのを避けるためなど)。 。ただし、この単純なソリューションは完璧にはほど遠いです。誰かが私にもっと良い解決策を提供してくれることを願っています。

4

7 に答える 7

9

あなたが言及しているテクニックはステミングと呼ばれています。言語には非常に多くの影響があるため、これをアプリケーションレベルで自分で処理するのは困難です。これに対処したくない場合は、実行しているMySQLのバージョンに応じて、MySQLに手間のかかる作業を任せることができます。バージョン5.6.4以降を使用している場合は、MyISAMテーブルとInnoDBテーブルの両方のフルテキスト検索メカニズムに組み込まれています。バージョン5.5から5.6.3では、MyISAMに組み込まれていますが、InnoDBテーブルには組み込まれていません。バージョン5.1の場合、mnoGoSearchから入手できるプラグインがあります。5.1より前は、アプリケーションレベルで処理する必要があると思いますが、確認していません。

これらのリンクは、始めるのに役立つ場合があります。

ストップワードリストは、クエリの処理時に検索テキストで無視される非常に一般的で、多くの場合短い単語のリストであることに注意してください。期待される結果が得られない場合にストップワードリストを制御するための設定があります。最小単語長を2または3(デフォルトは4)に設定し、デフォルトリストの多くの単語を削除することをお勧めします。

ステミングを自分で、またはPHPで処理したい場合は、MartinPorterによるPorterStemming Algorithmの詳細な技術的説明があり、少なくとも2つのPHP実装が利用可能です。JonAbernathyによるPHP4の古い実装には、いくつかの欠陥がある可能性があります。そして、RichardHeyesによるPHP5の新しいもの

あなたは主に英語に関心があると思いますが、他の言語もある程度サポートされていると思います。

rnmccallで述べたように、より高度な検索機能が必要な場合は、SphinxまたはApacheLuceneを使用する必要があります。

于 2012-07-17T01:27:34.620 に答える
3

質問で説明されている接尾辞を削除する戦略は、一般にステミングと呼ばれます。それでもその戦略を追求することに興味がある場合は、ステミングの背景についてhttp://tartarus.org/~martin/PorterStemmer/を確認する必要があります。このページには、PorterステマーのPHP実装と、より最新のアルゴリズムへのリンクも含まれています。

このステミング検索アプローチは、特にpydocに使用されるSphinxによって使用されます。

ステミングアプローチの主な利点は、簡単で軽量にできることです。

ただし、より高度な検索機能が必要な場合は、ApacheLuceneのようなものを使用する必要があります。

于 2012-07-23T04:17:09.103 に答える
1

Luceneの使用をお勧めします。また、複雑なクエリを実行していないため、データベースへのストレスが少なくなります。インデックスを検索するだけです。Luceneを使用してあいまい検索を実行することもできます。

于 2012-07-25T17:24:11.473 に答える
0

ed削除したいという意味や何かはありません。段落から文字列を検索しているため、検索用に特定のキーワードを指定する必要があります。そのキーワードは、完全な文字列(単語)または部分文字列(単語の一部)にすることができます。

例:-

あなたはblack穴の中にいます。

次に、検索文字列として指定して検索blackします。bla次に、次のようなクエリを実行します:-

SELECT * FROM TABLE_NAME WHERE YOUR_FIELD_NAME LIKE '%BLA%'

上記のクエリを使用して、コンテンツと完全に一致させます。検索するパラ/パッセージから任意のサブ文字列を指定できます。

それがあなたを助けることを願っています。

于 2012-07-23T09:14:57.077 に答える
0

簡単に使用できます

SELECT * FROM topics WHERE Title LIKE '%cat%'

クエリで、タイトルがcatおよびcatsのトピックを検索します。大きなテキストコンテンツからデータを検索する場合は、FullTextSearchを使用できます。この場合、MyISAMテーブルのみを使用する必要があります。ここで全文検索のドキュメントを読むことができます

于 2012-07-23T07:26:18.713 に答える
0

簡単なクエリは次のようになります。

    select * from table where item like '%name%'

tとtedを回避するには、substr()関数を使用して文字列をユニバーサルサイズにし、その文字列をwhere句に配置します。

于 2012-07-23T19:28:39.297 に答える
0

考えられる解決策:

1.最も簡単な実装->%operatorを使用

%cats%のように

2.最適なアルゴリズムが実装されているため、solrを使用して迅速に実装します。

注:uは結果をキャッシュにキャッシュすることもできます

于 2012-07-27T18:39:36.937 に答える