【问题标题】:How do I search Full text with partial matches?如何搜索部分匹配的全文?
【发布时间】:2012-03-09 17:18:46
【问题描述】:

我有一张表,行数不多,列数也不多。我正在对 3 列进行全文搜索。

我的代码是

$search_input = trim($_GET['s']);
$search = mysql_real_escape_string($search_input);
$search = '+'.str_replace(' ', '* +', $search).'*';

$sql = "SELECT * FROM table WHERE   
        MATCH(def, pqr, xyz) AGAINST ('$search' IN BOOLEAN MODE)";

$result = mysql_query($sql);

我可以正确搜索像 abcdefgh 这样的词,它们以 ...abcdefgh ... 的形式出现。

但是我收到了带有 abc 之类的搜索词的空集,其中表条目中存在诸如 abc-123 之类的内容,以及诸如 abcdefghs。 (注意这是上面的复数)

显然我需要实现部分搜索,或类似的东西。
但是我该如何实现这样的搜索呢?有没有更好的方法来对用户输入进行整个表搜索?

请提及我做错的任何事情。

EDIT :通过在每个单词后添加 *,现在我也可以搜索 abcde,但仍然存在上述问题。

【问题讨论】:

    标签: php mysql database full-text-search


    【解决方案1】:

    你的意思是你没有得到 3 个字母组合的结果?如果是这样,您可能会达到 mysql 索引长度(通常设置为 3)

    更多信息在这里 - http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

    【讨论】:

    • 是的,看来我遇到了这个麻烦。顺便说一句,我认为您提到的页面默认是 4 个字符而不是 3 个字符。而且我无法触及这个长度。
    • 对不起,是的。查看文档,在您的 conf 文件中设置 ft_min_word_len 选项可能会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2018-01-12
    • 2019-10-20
    • 1970-01-01
    • 2011-03-04
    • 2023-01-02
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多