我这里遇到一个小问题,我试图创建一个能够响应输入文本的人工智能,但问题是
假设我们有一个名为”AI”的数据库,其中包含”answer”和”question”两个列
如果我尝试使用查询询问”Hey why are my mobile explode”
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条件操作符的条件
Value = ... are my mobile **explode**Condition = **explode**
所以上面的情况是匹配的
但是,是否有可能反转这个功能?我是说,如何读取包含在条件文本中的值…
Value = ... **explode**Condition = "....are my mobile **explode**
提前感谢,希望有人能在这里帮助我..
回答:
如此简单的查询永远不会奏效。你最好使用全文索引,它允许进行这种“自然语言”查询。如果出于某种原因你不能使用全文索引,那么你将不得不进行大量的前处理来构建查询。对于你的第一个示例,它必须是:
SELECT ... WHERE (question LIKE '%hey%') OR (question like '%why%') OR (quetsion LIKE '%...%')
性能将非常糟糕,因为完全通配的子句完全无法使用索引。问题中的单词越多,MySQL必须进行的全表扫描就越多,一切都会花费更长的时间。
相比之下,全文查询版本将是
SELECT ... WHERE MATCH question AGAINST ('Hey why are my mobile explode');
在元层次上,我希望这个问题的答案是“你为什么要搜索这个,而不是去医院治疗烧伤/弹片伤口?”