1

頭字語は、特に検索を行うときに、私のデータベースで苦痛です。検索クエリ中にピリオドを受け入れるかどうかは決めていません。検索時に直面する問題は次のとおりです。

  • 「IRQ」は「IRQ」を見つけられません
  • 「IRQ」は「IRQ」を見つけられません
  • 「IRQ」または「IR.Q」は「IRQ」または「IRQ」を検出しません

等...

同じ問題が省略記号(...)または3つの一連のピリオドにも当てはまります。

この問題でどの方向に進むべきかを知る必要があります。

  • 文字列をデータベースに挿入するときにすべてのピリオドを削除する方が良いですか?
  • もしそうなら、削除する必要があるものを識別するために(省略記号または3つの一連のピリオドの代わりに)ピリオドを識別するためにどの正規表現を使用できますか?
  • 頭字語でピリオドを保持できる場合、正規表現を使用したMySQLまたはおそらく私が知らないMySQL関数を使用して、検索フィールドに「IRQ」を入力した場合、クエリで「IRQ」を見つけるためにスクリプトを作成するにはどうすればよいですか? ?
4

5 に答える 5

2

各質問に対する私の回答:

  • データベースに文字列を挿入するときにすべてのピリオドを削除した方がよいですか?

はいといいえ。データベースに元のテキストが必要です。必要に応じて、検索対象として「クリーンアップ」された別のフィールドを作成します。ここでは、ピリオドを削除したり、すべてを小文字にしたりできます。

  • もしそうなら、削除する必要があるものを特定するために、(楕円や 3 つの一連のピリオドの代わりに) ピリオドを特定するためにどの正規表現を使用できますか?

    /\.+/

これは、特定の場所で 1 つ以上のピリオドを見つけます。ただし、それを検索式と統合する必要があります。

注: データベースでの正規表現が高いパフォーマンスを発揮することは知られていません。これには注意してください。

その他の注意: MySQL で全文検索を使用することをお勧めします。これも、1000 以上のエントリを超えるデータ セットで高いパフォーマンスを発揮することは知られていません。大きなデータがあり、全文検索が必要な場合は、Sphinx (MySQL プラグインおよび RAM ベースのインデックス作成システムとして利用可能) を使用してください。

  • 頭字語でピリオドを保持することが可能である場合、検索フィールドに「IRQ」を入力した場合、クエリでスクリプトを作成して「IRQ」を見つけるにはどうすればよいでしょうか。 ?

はい、最初の箇条書きの回答で説明した 2 つのフィールドを使用します。

于 2013-02-03T16:27:21.233 に答える
1

入力の神聖さを考慮する必要があります。自分で変更する必要がない場合は、変更しないでください。代わりに、テキスト検索を可能にする別のシステムを用意する必要があります。これにより、これらのタイプの問題を処理できるように、適切と思われるテキストを変更できます。

Lucene、特に Lucene の標準アナライザーを読んで、複雑なテキストの検索を成功させるために一般的に実行される変更の種類を確認してください。

于 2013-02-03T16:25:07.320 に答える
1

REGEXPMySQL の機能を使用して頭字語を送信できると思います。

SELECT col1, col2...coln FROM yourTable WHERE colWithAcronym REGEXP "#I\.?R\.?Q\.?#"

PHP を使用している場合は、次の単純なループで正規表現を作成できます。

$result = "#";
foreach($yourAcronym as $char){
    $result.=$char."\\.?";
}
$result.="#";
于 2013-02-03T16:25:50.313 に答える
1

あなたが探している機能は全文検索です。Mysql は myisam-tables ではこれをサポートしていますが、innodb ではサポートしていません。( http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html )

または、その機能を提供する外部フレームワークを使用することもできます。Lucene は人気のあるオープンソースの 1 つです。( lucene.apache.org )

于 2013-02-03T16:25:54.497 に答える
0

2つの方法がありますが、

1. save data -removing symbols from text and match accordingly,
2. you can make a regex ,like this for eg.

select * from table where acronym regexp '^[A-Z]+[.]?[A-Z]+[.]?[A-Z]+[.]?$';

ただし、これには頭字語を大文字で保存する必要があることに注意してください。大文字と小文字を区別したくない場合は、[AZ] を [A-Za-z] に変更してください。

于 2013-02-03T16:27:28.273 に答える