【问题标题】:Using FULL TEXT and exact match for results with words below ft_min_word_len使用 FULL TEXT 和精确匹配 ft_min_word_len 以下单词的结果
【发布时间】:2019-01-26 13:47:24
【问题描述】:

我有一个名称数据库。这有一个全文索引。

ft_min_word_len 设置为 4。我在分片托管,因此无法更改。

有时查询可能包含少于 4 个字符的单词。

例如,如果表中包含 Ben Smith 和 John Smith 的行,则对 MATCH(name) AGAINST('Ben Smith') 的查询将返回两行,与 'Ben' 相同的分数被忽略,小于 4 个字符。

我需要 Ben Smith 以最高分返回。我认为通过对完全匹配的额外搜索以某种方式伪造分数值会有所帮助,但我对如何实现这一点感到困惑。

【问题讨论】:

    标签: mysql sql full-text-search


    【解决方案1】:

    好吧,你可以使用全文搜索来减少行数,并使用like作为你的最终分数:

    select ((name like '%Ben%') + (name like '%Smith%')) as my_score
    from t
    where MATCH(name) AGAINST('Ben Smith');
    

    【讨论】:

    • 试一试。没用。他们都以 1 分返回。
    • 我对您的建议进行了更改。我没有使用通配符的名称,而是简单地执行了 name = 'search term' ,然后按 my_score 对 MATCH 分数进行二次排序。这行得通。谢谢。
    • @BobHoskins 。 . . 'John Smith' 应该为这个表达式返回“1”,'Ben Smith' 应该返回“2”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多