【问题标题】:Find record with keywords from sentences从句子中查找带有关键字的记录
【发布时间】:2018-07-25 08:39:05
【问题描述】:

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

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 做到这一点?或者也许有一些方法可以构建它?请任何知道这样做的人都可以帮助我。之前谢谢。

【问题讨论】:

  • 您可以通过 Mysql 使用 "Like" 运算符来实现此目的。
  • @Shivrudra 问题是我怎么知道句子使用了一些关键字?比如What is the room price ?我怎么知道关键字是room and price

标签: php ajax keyword-search


【解决方案1】:

我建议不要将用逗号分隔的关键字存储在单行中,而是将它们插入不同的行中。因为当您尝试搜索关键字中的任何文本时,它总是会检查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() 搜索逗号分隔的关键字。

它可能会起作用。

【讨论】:

  • 你试过FIND_IN_SET()吗?
  • 是的,我也试过FIND_IN_SET(),但仍然没有得到结果。
【解决方案2】:

我的方法是使用停止词的概念从用户查询中删除所有停止词。

然后只搜索用户查询中的所有关键字。

DATA 条目需要删除大部分用户数据才能保持稳健。如果他们打算通过插入代码来破坏您的系统怎么办。

停用词包括 'the' 'a' 'of' 我们的想法是尽可能多地删除垃圾,然后对其他词非常挑剔。

记录查询数据以备查询失败。 记录您认为正在处理的 ACCESS 数据 然后设置响应时间的超时。 例如。如果您知道查询应该只接受 X 毫秒。那么任何花费比这更长的时间都是可疑的。它可能已经越过了你的保护层。请确保在日志文件中记录 IP 地址和时间戳 - 最好在日志条目的开头。

然后编写用于处理 SLICE 的脚本。 SLICE 是帮助系统管理员的好方法 谁可能必须向您发送一部分日志文件。 切片可能很复杂——从 DAY (YYYYMMDDmm.s) 到另一个 DAY,并且它们可能有一个通宵运行的压缩系统——因此您的脚本需要访问普通日志文件和压缩日志文件。有时文件会因系统故障而分裂 - 即。系统因某种原因死机。

您的 SLICE 信息可以打包成电子邮件等发送给您进行分析。

祝你好运。

【讨论】:

  • 你有这方面的例子吗?我不太明白你的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多