【问题标题】:Php/mysql search enginephp/mysql 搜索引擎
【发布时间】:2014-04-23 06:30:29
【问题描述】:

我如何使用 php/mysql 搜索引擎精确匹配或在任何地方匹配表中的关键字。

例如:我添加了一个带有关键字的网址:UFC 131 online 第二个带有关键字的网址:UFC 132 online

如果我在搜索框中输入 UFC 132,我如何让第二个网址首先出现?

因为如果我使用这个代码

        //explode out search term
 $search_exploded = explode(" ",$search);

 foreach($search_exploded as $search_each)
 {

     //construct query
$x++;
if ($x==1)
 $construct .= "title LIKE '%$search_each%'";
else
 $construct .= " or title = '$search'";

我在网上搜索 ufc 132,它首先给了我 ufc 131 在线结果。

【问题讨论】:

  • 请不要多次发布同一个问题。只需几分钟,如果您想添加额外信息,可以编辑您的问题。
  • 好的,请删除另一个
  • 我做不到,但你可以。

标签: php mysql search-engine


【解决方案1】:

你可以这样实现:

SELECT *, MATCH (title) AGAINST ('searchstring' IN BOOLEAN MODE) + 
CASE 
WHEN title = 'searchstring' THEN 10 
ELSE 0
END AS relevance FROM `wrestlingsucks`
HAVING relevance > 1.0
ORDER BY relevance DESC LIMIT 100

这是一个非常基本的示例,它所要做的就是在 sudo 相关性列中添加 10(如果它完全匹配)。但是,您可以根据需要使用全文和自然匹配来变得复杂。

【讨论】:

  • 你能告诉我把代码放在哪里吗?我使用的代码是tinypaste.com/26879
  • 就像我想在标题字段的任何地方进行精确的关键字匹配,例如,我添加了一个带有标题的网址:Love The Way You Lie ft. Rihanna,我输入爱你说谎的方式,我想要那个要显示的网址
  • 这将是您将使用的 SQL,而不是分解术语。
【解决方案2】:

与手工搜索相比,MySQL 具有更出色的全文搜索搜索功能。看看fulltext-search

【讨论】:

  • 你准备好尝试一下了吗?
【解决方案3】:

来自documentation MATCH (col1,col2,...) AGAINST (expr [search_modifier])

【讨论】:

  • ? wtf jk 真的不知道这是什么意思
【解决方案4】:

在 MySQL 中使用 Levenshtein 算法。

Levenshtein 匹配是 测量差异量 在两个序列之间,这里是 字符串。默认情况下 MySQL 不会 有这个功能,但你可以写 并添加一个。

请看这里的代码并将该代码添加为 MySQL 中的系统函数,请参阅下面的示例了解如何获取两个字符串的相似度。

请看:https://github.com/rakesh-sankar/Tools/blob/master/MySQL/Levenshtein.txt

示例:SELECT column1, LEVENSHTEIN(column1, 'matchme') AS 完美匹配 FROM sometable ORDER BY 完美匹配DESC

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多