3

こんにちは 私はいくつかの記事を含む私のウェブサイトの内部検索エンジンに取り組んでいます。HTML エンコード形式でデータベースに保存されている記事のキーワードを検索する必要があります。

たとえば、これは私のデータベースの記事である可能性があります

</h2><p><span style="color:#FF0000;">Lorem ipsum dolor sit 
amet</span>, consectetur adipiscing elit. Cras nec elit quis urna laoreet venenatis. 
<em>Vestibulum</em> a erat orci. In hac habitasse platea dictumst. Nunc pulvinar,
felis vel facilisis commodo, lectus sem accumsan ante, non vestibulum ligula lorem nec leo. 
In nec elit at dolor aliquam consequat sed sed leo. Nulla facilisi. Fusce id turpis magna. 
<span style="background-color:#FFFF00;">

人間が読めるテキストは常に><の間にあるため、そのテキスト内でキーワードを見つける必要があります。これを行うには、次のようなクエリが必要です。

SELECT title, (human readable content) FROM articles WHERE (human readable content) LIKE '%keyword%'

そして、Googleの説明のように、html形式のない人間が読める内容を説明として表示する必要があります。

どうすればいいですか?

4

2 に答える 2

2

MySQL には正規表現による置換がないため、このようなアクションを実行するのは簡単なことではありません。テキストには多くの html タグが含まれている可能性があるため、それらをすべて削除したいと考えています。そうで、SQL で実行する予定がある場合は、ストアド プロシージャで頑張ってください。

LOCATE()SUBSTR()、およびREPLACE()を使用していくつかのシリアル置換を実行したい場合があります-しかし、さまざまな成功を収めています-サンプルを見ると、それらを適用するための確実な条件がないことがわかります(そのため、サンプルを提案していませんSQL コード)。

私の意見では、正しい解決策はアプリケーションでそれを行うことです-たとえば、PHPには問題を簡単に解決するstrip_tags()&gt;があります(ただし、 andからそれらを復元する必要があります&lt;-しかし、それは簡単な作業です)そうでない場合PHP については、対応する言語のマニュアルを参照してください。

于 2013-10-25T12:44:25.827 に答える
1

SQL は多くのタスクに適していますが、正規表現の置換/照合は必ずしもその 1 つではありません。その部分をアプリケーションのビジネス ロジックに移動することを検討する必要があります。

テキストの人間が読める部分を別の列に入れることができれば、これが最も簡単な方法です。テキストをデータベースに書き込むときは、正規表現または DOM 解析を実行して、人間が読める部分を追加するためにテキストを取り除く必要があります。&lt;との間にあるものだけでなく、最も内側の HTML 要素のテキストが必要な&gt;ため、テーブルに書き込む前に、最初に HTML DOM を解析できるかどうかを確認してください。パーサーをゼロから作成するよりも、DOM パーサーを使用する方が簡単な場合があります。

次に、人間が読める列から検索するための単純な SQL クエリを実行できます。元のクエリは次のように機能します。

SELECT title, content FROM articles WHERE content LIKE '%keyword%'

データセットが大きく、インデックスがない場合、テーブル全体を検索すると非常に遅くなる可能性があるため、人間が判読できる列が全文インデックスにあることを確認してください。

于 2013-10-25T13:10:01.567 に答える