【问题标题】:MySQL search query for best text matchMySQL搜索查询以获得最佳文本匹配
【发布时间】:2014-08-11 14:11:26
【问题描述】:

我正在努力为用户提供更好的搜索体验,我们有很多长标题的产品,例如:

"Loptop Acer V3-772 17.3" HD+ / Intel Core i7-4702MQ iki 3.2Ghz / 4Gb DDR3 1600Mhz / 1Tb HDD / GeForce GTX850 2Gb DDR5 / WiFi / HDMI / 蓝牙 / 高清摄像头/ USB 3.0 em>"

因此,如果客户正在寻找:“Acer 4Gb 1Tb i7” loptop,使用 MySQL 函数 LIKE %...% 它会很快找到它,但如果一个结果像“i7 " 未找到,查询结果为 0。

我们正在尝试按每个搜索关键字进行搜索,然后计算结果最多的关键字,并在其中搜索 2 个和 3 个组合的 LIKE 词。

或者有什么更简单的解决方案可以实现所有搜索?

更新:大家好, 所以我得到了我的任务的解决方案 - 用最少 1 个符号进行全文搜索,在 my.ini 文件中重新配置,所以它会寻找“i7”和所有其他小的搜索,谢谢你的帮助:)

【问题讨论】:

  • 你试过全文搜索吗?
  • 你目前有什么代码?
  • 是的,搜索有两部分,一是全文,二是like,现在我想把它变成一个普通的搜索功能。只是在尝试进行搜索时迷失了方向,大量的谷歌搜索,这是我最后的求助方法。
  • @j08691:全文搜索针对“自然”语言进行了优化——使用“i7”之类的短搜索词,您马上就会遇到它的限制。
  • @CBroe - 可以通过将 ft_min_word_len 更改为 2 来解决短的“i7”术语问题。

标签: php mysql search


【解决方案1】:

更好地做你想要达到的目标:

$search_key = $_POST['searchkey'];  //take the search text from the post method

$search_words = array();
$search_words = explode(" ",$search_key);



$q_string = "";
$last_index = intval(count($search_Words)) - 1;

for($i = 0; $i<count($search_Words);$i++)
  {
    $q_string = $q_string . " description LIKE '%$search_words[$i]%' ";
    if($i != $last_index)
      $q_string = $q_string . " OR ";

   }

最后

mysql_query("SELECT * FROM table_name WHERE ".$q_string);

注意: 假设description字段包含表table_name中产品的详细信息

【讨论】:

  • 感谢您抽出宝贵时间,正如我在问题中提到的,现在我正在使用全文搜索,效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多