【问题标题】:SQL MATCH/AGAINST word orderSQL MATCH/AGAINST 词序
【发布时间】:2014-03-15 20:13:36
【问题描述】:

在使用 SQL 的 MATCH/AGAINST 功能的查询中何时计算字序?

假设我正在寻找一个名字与 Palwinder Singh 相似的人,使用以下代码:

  SELECT DISTINCT id,name,surname FROM person 
  WHERE MATCH(name,surname) 
  AGAINST('+Palwinder+Singh' IN BOOLEAN MODE)

此代码正确返回与名为 Palwinder Singh 的人(恰好在我的数据库中是唯一的)相关的信息(这是预期结果)

但是,如果我使用以下代码:

  SELECT DISTINCT id,name,surname FROM person 
  WHERE MATCH(name,surname) 
  AGAINST('+Singh+Palwinder' IN BOOLEAN MODE)

我得到了所有姓氏为“Singh”的玩家(总共 22 人)的名单,似乎忽略了我正在寻找 Palwinder Singh 的事实。

我不明白为什么结果不同?我怎样才能让查询不关心词序?

【问题讨论】:

  • 这真的是 SQL SERVER 从未听说过 MATCH AGAINST 子句吗?

标签: mysql match-against


【解决方案1】:

你应该在关键字之间使用空格

AGAINST('+Singh +Palwinder' IN BOOLEAN MODE)

我认为当我们使用“+Singh+Palwinder”时,它会搜索具有“Singh+Palwinder”之类的字符串的字段。 但是当我们使用“+Singh +Palwinder”时,会在指定字段中同时搜索“Singh”和“Palwinder”。

【讨论】:

  • 谢谢你,我原以为 + 运算符足以让它检测到两个单词?
【解决方案2】:

你为什么不干脆做点...

SELECT id
       ,name
       ,surname 
FROM person 
WHERE name = 'Palwinder'
AND   surname = 'Singh' 

【讨论】:

  • 因为我不确定用户是否会以正确的格式输入名称。此代码用于导入用户已填写且没有任何要填写的指南的统计表。有些人输入名字,姓氏,其他人姓氏,名字,有些人用姓氏的首字母给出名字,而另一些人则用姓氏的名字的首字母(不一定在那个订购!)
  • 实际上我将使用的所有工作表都会有这个问题,所以我试图通过根据用户输入的内容进行搜索来解决它。如果搜索返回一个结果,我将假设用户想要引用该人,否则系统返回错误并允许用户从列表中进行选择。
猜你喜欢
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2019-07-25
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多