gpt4 book ai didi

php - MySQL 全文搜索 - 数值和 ft_min_word_len 的解决方法

转载 作者:行者123 更新时间:2023-11-29 14:53:21 26 4
gpt4 key购买 nike

我正在使用 MySQL 全文搜索 IN BOOLEAN MODE,但由于 ft_min_word_len 设置施加的字符限制,在搜索字符串中遇到数值问题在 my.cnf 中(当前在此服务器上设置为 3)。是否有任何解决方法,以便像“something 14”这样的搜索会搜索“something”和“14”(甚至“14”),因为当前字符限制意味着长度小于 3 位的数字将被忽略。由于搜索字符串中的数字片段很重要,我们需要将 ft_min_word 减少到 1 以确保所有搜索返回正确的结果,这将使索引极其缓慢。一个潜在的解决方案是使用 PHP 将数字替换为相应的单词,并确保该单词也添加到可搜索文本中,但这感觉很hacky。

还有其他想法吗?

最佳答案

是的,我几年前就遇到了这个问题,并且一直在为我的客户使用这个解决方案。从结果来看,它使事情进展顺利。

基本上,它的作用是将 3 个字符以下的任何内容拆分为 LIKE 搜索,将 3 个以上字符的任何内容拆分为全文 bool 搜索。我目前正在努力发布我的分层搜索版本。但直到我完成那件事。我发布了它的全文部分,以便您可以使用该代码。如果您有任何问题或改进它。我只是要求您将其发布到我的项目托管网站上,以便它变得更好。

完整功能显示在源链接中。

$parseQuery = explode(" ",$query);
foreach($parseQuery as $key => $qvalue)
{
if(strlen($qvalue) > 3)
{
$buildQuery .= "$qvalue ";
}
elseif(strlen($qvalue) >= 2)
{
$buildLike[] = "`blog` LIKE '%$qvalue%'";
}
}

if($buildLike != "")
{
$numCountQuery = 0;
$countforbuilding = count($buildLike) - 1;
foreach($buildLike as $key => $queryforLike)
{
if($numCountQuery != $countforbuilding)
{
$finalBuildLike .= "$queryforLike AND";
}
else
{
$finalBuildLike .= "$queryforLike";
}
$numCountQuery++;
}
}
if(($finalBuildLike != "") && ($buildQuery != ""))
{
$finalBuildLike = "AND $finalBuildLike";
}

if($buildQuery != "")
{
$buildDescription = $buildQuery;
$buildQuery = "MATCH(blog) AGAINST ('".trim($buildQuery)."')";
}

http://code.google.com/p/php-mysql-layered-search/

希望这有帮助。

关于php - MySQL 全文搜索 - 数值和 ft_min_word_len 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com