【问题标题】:Fulltext search with mysql ignoring # charactermysql全文搜索忽略#字符
【发布时间】:2014-02-19 16:24:33
【问题描述】:

我在personaldreamjournal.com 上写了一个简单的日记/期刊在线应用程序。您可以在演示模式下登录以使用名称来宾和密码用户进行测试。

它使用 LIKE 对日记中的单词进行全文搜索。我想添加允许标签以轻松标记条目的功能。就像有人输入#workout 一样,它会返回所有带有#workout 标签的条目。但显然没有那么容易,因为它似乎忽略了标签。 (不知道他们为什么会忽略文本框中的任何字符??但生活也是如此)。

因此,所有带有单词锻炼的条目都将返回,因为 # 被忽略。 我只想确认,从我到目前为止搜索的内容中,因为没有特别提到 # 字符。

所以我假设 # 是由于某种原因被忽略的特殊字符? 并且我要更改它我必须在某处更改 MYSQL 配置? # 字符具体在哪里?

任何帮助确认我所说的是真的,以及如何允许 #character 被计入返回结果,我们都非常感激。

更新: 下面是我使用的实际代码。所以我没有使用 LIKE

  $query_Recordset1 = "SELECT *, MATCH(`scroll`.text) AGAINST (+'$searchstring_Recordset1'     IN BOOLEAN MODE) AS score FROM scroll WHERE MATCH(`scroll`.text) AGAINST('+$searchstring_Recordset1' IN BOOLEAN MODE) having score > 0.2 AND user = '$username' ORDER BY score DESC";

【问题讨论】:

    标签: mysql full-text-search sql-like


    【解决方案1】:

    Norman,使用LIKE 关键字未使用全文搜索。您必须将文本字段设置为具有全文索引。 (MyISAM 表,我相信)然后,做这样的事情:

    Select * From table Where (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE) > 0);
    

    这将为您提供所有匹配的结果。

    如果您希望它们具有排名顺序以及返回的排名,您可以这样做:

    Select *, (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE)) As rank From table Where (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE) > 0) Order By (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE)) Desc;
    

    我读过,多次使用全文搜索不会减慢您的查询速度,因为 MySQL 认为它是相同的搜索并且只使用相同的结果。

    此外,如果您只是想知道使用 LIKE 关键字的答案,我们需要查看您的原始查询。

    编辑

    看起来这个人和你有同样的问题并且已经解决了。

    MySQL Full-Text search for hashtags (including the # symbol in index)

    看来,使用全文搜索加上这应该是您所需要的。

    【讨论】:

    • 感谢詹姆斯的精彩回复。我将实现您的代码版本并报告是否适合我的需要。赞赏。
    • 所以@James,看来我已经在使用类似于您建议的东西了,这似乎是最佳实践,可能是我使用它的原因:o),现在仍然面临如何进行搜索在搜索中尊重标签 #,因为现在它会忽略它。我必须在某个地方改变一些东西,不确定是什么。
    • @NormanBird 我不认为你可以Order By score,因为它不是一个实际的字段。但是您也可以echo 完整的查询文本(在文本区域中带有示例)进行测试吗?另外,您在当前查询中是否有任何错误?还是只是不返回结果? echo mysql_error()echo mysqli_error() 如果使用 mysqli
    • 它确实有效并且没有给出错误,所以我认为分数有效。它搜索文本字段并从日记中返回条目。如果我搜索一个单词,则返回所有包含该单词的条目。我希望 Twitter 效果能够使用 # 散列内容。然后有人可以输入#workout 并找到一个带有单词锻炼的条目。但#workout 搜索返回所有带有锻炼的条目并忽略# 字符。我查了一下,字符映射是瑞典拉丁语默认值,其中包括 ascii 字符#。所以这是我在
    • @NormanBird 检查我的答案中的编辑。看起来其他人能够使用该答案使其正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2016-05-25
    • 2015-02-14
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多