1

ここで少し問題があります。入力テキストに応答する AI を作成しようとしましたが、問題は

列「回答」と「質問」を含む「AI」というデータベースがあるとのことでした。

クエリを使用して「なぜ私のモバイルが爆発するのですか」と尋ねようとすると

SELECT * FROM AI where question LIKE "%Hey why are my mobile explode%" LIMIT 1

そして、私はこのようなデータベースレコードを持っています...

Question  |   Answer
================================
Explode   | because you got suck

クエリから何も結果が得られませんでしたが、レコードを変更してクエリを次のように変更すると...

クエリ

SELECT * FROM AI where question LIKE "%explode%" LIMIT 1

データベース

Question                        |   Answer
=======================================================
Hey why are my mobile Explode   | because you got suck

リターンを頂きました..

結論は、「LIKE」オペランドは、条件テキストを含む値を読み取るということです...

VALUE は Question 列の値です CONDITION は LIKE 条件 OPERAND の条件です

Value = ... are my mobile **explode**
Condition = **explode**

したがって、上記の場合はMATCHです

しかし、関数を逆にすることは可能ですか?つまり、条件テキストに含まれる値を読み取る方法...

Value = ... **explode**
Condition = "....are my mobile **explode**

前にありがとう、誰かがここで私を助けてくれることを願っています..

4

1 に答える 1

2

このような単純なクエリは機能しません。このような「自然言語」クエリを可能にするFULLTEXT indexを使用する方がはるかに良いでしょう。何らかの理由でフルテキストを使用できない場合は、クエリを作成するために大量の前処理を行う必要があります。最初のサンプルでは、​​次のようにする必要があります。

SELECT ... WHERE (question LIKE '%hey%') OR (question like '%why%') OR (quetsion LIKE '%...%')

のような完全にワイルドカード化された句はインデックスをまったく使用できないため、パフォーマンスは絶対に最悪になります。質問の単語が多いほど、MySQL が実行する必要があるテーブル全体のスキャンが多くなり、すべてに時間がかかります。

比較すると、クエリの全文バージョンは次のようになります。

SELECT ... WHERE MATCH question AGAINST ('Hey why are my mobile explode');

そして... メタレベルでは、その質問に対する答えが「火傷/破片の傷を治療するために病院に行くのではなく、なぜこれを探しているのですか?」であることを願っています.

于 2012-07-09T04:48:30.480 に答える