Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据相关性对全文索引搜索结果进行排序_Php_Mysql_Sql - Fatal编程技术网

Php 如何根据相关性对全文索引搜索结果进行排序

Php 如何根据相关性对全文索引搜索结果进行排序,php,mysql,sql,Php,Mysql,Sql,您好,我在根据相关性对sql查询结果进行排序时遇到问题 这是我目前的疑问 SELECT author FROM search WHERE MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE) 有谁能告诉我如何根据相关性对结果进行排序的解决方案吗?您可以选择匹配项作为查询的一部分,并将其作为“分数”返回。然后你就可以分类了。即: SELECT author, MATCH(author,title,series

您好,我在根据相关性对sql查询结果进行排序时遇到问题

这是我目前的疑问

SELECT author FROM search WHERE MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE) 

有谁能告诉我如何根据相关性对结果进行排序的解决方案吗?您可以选择匹配项作为查询的一部分,并将其作为“分数”返回。然后你就可以分类了。即:

SELECT 
  author,
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE) as score
FROM 
  search 
WHERE 
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE)
ORDER BY
  score
更新:下面是一个加权示例

SELECT 
  author,
  (
   (MATCH(author) AGAINST('Anna Selby' in BOOLEAN MODE) * 20) +
   (MATCH(title) AGAINST('Anna Selby' in BOOLEAN MODE) * 10) +
   (MATCH(series) AGAINST('Anna Selby' in BOOLEAN MODE) * 5)) as score
FROM 
  search 
WHERE 
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE)
ORDER BY
  score

您可以选择匹配项作为查询的一部分,并将其作为“分数”返回。然后你就可以分类了。即:

SELECT 
  author,
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE) as score
FROM 
  search 
WHERE 
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE)
ORDER BY
  score
更新:下面是一个加权示例

SELECT 
  author,
  (
   (MATCH(author) AGAINST('Anna Selby' in BOOLEAN MODE) * 20) +
   (MATCH(title) AGAINST('Anna Selby' in BOOLEAN MODE) * 10) +
   (MATCH(series) AGAINST('Anna Selby' in BOOLEAN MODE) * 5)) as score
FROM 
  search 
WHERE 
  MATCH(author,title,series) AGAINST('Anna Selby' in BOOLEAN MODE)
ORDER BY
  score

可能重复的可能重复的Hey谢谢你的回答。但结果仍然没有达到预期。泰德·塞尔比的名字比安娜·塞尔比的分数高。知道怎么做吗?我使用了与你给出的完全相同的查询。我也收到了一种警告。。“当前所选内容不包含唯一的列。网格编辑、复选框、编辑、复制和删除功能不可用。”如果不查看数据,很难说为什么,但由于您正在对3列进行匹配并使用布尔搜索,您的搜索可能会找到更多匹配项(即在Selby上)在Tedd和Anna的三列组合中。如果你愿意,你可以加权你的分数,给作者或标题更多的分数。我在上面添加了一个示例。查看更多信息嘿,非常感谢你的帮助,但我又犯了一个错误。找不到与列列表匹配的全文索引显示时出错。您是如何定义全文的?您可能需要分别为列添加键,以便对它们进行单独评分。ALTER TABLE search添加全文(作者)、添加全文(标题)、添加全文(系列)、添加全文(作者、标题、系列);工作。。谢谢你的回答。但结果仍然没有达到预期。泰德·塞尔比的名字比安娜·塞尔比的分数高。知道怎么做吗?我使用了与你给出的完全相同的查询。我也收到了一种警告。。“当前所选内容不包含唯一的列。网格编辑、复选框、编辑、复制和删除功能不可用。”如果不查看数据,很难说为什么,但由于您正在对3列进行匹配并使用布尔搜索,您的搜索可能会找到更多匹配项(即在Selby上)在Tedd和Anna的三列组合中。如果你愿意,你可以加权你的分数,给作者或标题更多的分数。我在上面添加了一个示例。查看更多信息嘿,非常感谢你的帮助,但我又犯了一个错误。找不到与列列表匹配的全文索引显示时出错。您是如何定义全文的?您可能需要分别为列添加键,以便对它们进行单独评分。ALTER TABLE search添加全文(作者)、添加全文(标题)、添加全文(系列)、添加全文(作者、标题、系列);工作。。谢谢