如何进行有效的站内搜索?

问题描述 投票:0回答:1

我正在尝试实现一个网站搜索,该搜索实际上可供真实的人使用,他们不会在搜索栏中输入确切的术语,有时会出现拼写错误等。

这是一个例子。我的数据库中有一个酒店列表,想按名称搜索它们。其中一间酒店的名称是“Taj Wellington Mews Mumbai”。预期的搜索词是“taj mumbai”。

这是我尝试过的:

  1. 使用
    LIKE
    时,搜索词与名称根本不匹配。
  2. 我创建了一个全文索引并尝试了
    Match() Against()
    它返回任何包含“泰姬陵”或“孟买”一词的酒店,例如“孟买瑞吉酒店”。
  3. 我将查询拆分为单词并删除了某些单词,在每个单词前面添加了
    +
    ,以便强制数据库包含每个单词。
$q = sanitize($_POST['search']);
$qParts = explode(' ', $q);
$fullTextQuery = '';
$filterWords = [
    'the', 'in', 'of', 'from', 'and', 'a', 'an'
];
foreach ($qParts as $key) {
    if(in_array(strtolower($key), $filterWords))
        return;
    $fullTextQuery .= '+'.$key.' ';
}
$searchQuery = "SELECT name, link FROM hotels WHERE MATCH(name) AGAINST ('$fullTextQuery' IN BOOLEAN MODE) AND status = 2";

问题是现在这种搜索词“taj mum”不起作用。用户必须填写“mumbai”一词才能获得结果。

如有任何建议,我们将不胜感激。

php mariadb
1个回答
0
投票

您可以使用标签进行搜索,随着时间的推移,您将训练您的搜索,首先将您的实例“Taj Wellington Mews Mumbai”的每家酒店的流行标签放入数据库中,其中包含标签[taj、mumbai、wellington、mews、mum、 Welling,...等],那么您需要为每个标签的每一行(酒店)评分。想象一下,您的访客输入 (taj mum),然后单击“Taj Wellington Mews Mumbai”,那么您将为与该行(酒店)关联的此标签添加 +1 分。随着时间的推移,它会更好,更准确(当然不是那么准确)。

© www.soinside.com 2019 - 2024. All rights reserved.