我的搜索功能遇到一些问题。当某些用户在搜索字段中键入句子时,我想从用户之前键入的句子中的关键字获得结果。例如,我有这样的数据库表:
ID | Keywords | Answer
-----------------------------------------------------------------------------
1 | price, room | The price room is $150 / night
2 | credit card | Yes, you could pay with credit card
3 | location | The Hotel location is in the Los Angeles
4 | how to, way to, book | You could pay with credit card or wire transfer
5 | room, size | The room size is 50sqm
这是用户输入的句子示例:
什么是房价?
room and price
。我可以用信用卡付款吗?
credit card
。房间大小是多少?
room and size
。示例1和3的句子中带有room
。我还想知道关键字是room price
和room size
。
如何从用户已经输入的句子中找到关键字?
如何使用该关键字从数据库中获取答案?
从这些示例中,我想知道如何使用PHP和MySql做到这一点?或者,也许有某种方法可以构建它?请任何人知道这样做可以帮助我。谢谢你。
答案 0 :(得分:0)
我建议不要将用逗号分隔的关键字存储在单行中,而应将它们插入不同的行中。因为当您尝试搜索关键字中的任何文本时,它将始终检查credit card
或price, room
。它不会将价格和房间视为不同的词,而是将其视为字符串。
对于您的问题,请尝试以下代码:
$que = 'What is the room price';
$keywords = str_replace(" ", ",", $que);
$sql = 'select answer from your_table where keywords IN (' . $keywords . ')';
或者您可以尝试让FIND_IN_SET()搜索以逗号分隔的关键字。
可能有效。
答案 1 :(得分:0)
我的方法是使用STOP WORDS的概念从用户查询中删除所有STOP WORDS。
然后仅在用户查询中搜索所有关键字。
DATA条目需要删除大多数用户数据才能保持健壮。如果他们打算通过插入CODE破坏系统,该怎么办。
停用词包括'the''a''of' 这个想法是要尽可能多地清除垃圾,然后对其他词语保持谨慎。
记录查询数据以防故障。 记录您认为正在处理的访问数据 然后在响应时间上设置超时。 例如。如果您知道该查询仅应 X毫秒。那么,任何比这更长的时间都是可疑的。它可能已经超出了您的保护层。确保确保将IP地址和时间戳记记录在日志文件中-最好是在日志条目的开头。
然后编写用于处理SLICE的脚本。 SLICE是帮助系统管理员的好方法 谁可能需要向您发送日志文件的一部分。 切片可能很复杂-从DAY(YYYYMMDDmm.s)到另一个DAY,并且它们可能已运行了一整夜的压缩系统-因此您的脚本需要访问常规日志文件和压缩日志文件。有时,这些文件会因系统故障而分裂。系统死于某种原因。
您的SLICE信息可以打包成电子邮件等,并发送给您进行分析。
祝你好运。