使用句子中的关键字查找记录

时间:2018-07-25 08:39:05

标签: php ajax keyword-search

我的搜索功能遇到一些问题。当某些用户在搜索字段中键入句子时,我想从用户之前键入的句子中的关键字获得结果。例如,我有这样的数据库表:

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

这是用户输入的句子示例:

  1. 什么是房价?

    • 在该句子中,系统将在句子中找到关键字,在这种情况下,关键字为room and price
    • 然后从该关键字中,系统将显示答案为价格为每晚$ 150
  2. 我可以用信用卡付款吗?

    • 在这种情况下,系统将在句子中找到关键字,在这种情况下,关键字为credit card
    • 然后系统会根据这些关键字显示答案,是的,您可以使用信用卡付款
  3. 房间大小是多少?

    • 在这种情况下,系统将在句子中找到关键字,在这种情况下,关键字为room and size
    • 然后从该关键字中,系统将显示答案为房间大小为50平米

示例1和3的句子中带有room。我还想知道关键字是room priceroom size

如何从用户已经输入的句子中找到关键字?

如何使用该关键字从数据库中获取答案?

从这些示例中,我想知道如何使用PHP和MySql做到这一点?或者,也许有某种方法可以构建它?请任何人知道这样做可以帮助我。谢谢你。

2 个答案:

答案 0 :(得分:0)

我建议不要将用逗号分隔的关键字存储在单行中,而应将它们插入不同的行中。因为当您尝试搜索关键字中的任何文本时,它将始终检查credit cardprice, 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信息可以打包成电子邮件等,并发送给您进行分析。

祝你好运。