【问题标题】:Can I prioritize the same word differently in different rows of a FULLTEXT column?我可以在 FULLTEXT 列的不同行中对同一个词进行不同的优先排序吗?
【发布时间】:2011-12-12 00:27:37
【问题描述】:

我有一个站点搜索,它通过从我的articles 表(namebodyauthorcategory)的几个字段中提取单词并将它们全部放入单独的搜索表中来工作使用单个 FULLTEXT 列。

我想提高搜索的准确性,以便从name 字段中提取的词比从articles 表的body 字段中提取的相同词具有更高的相关性。

换句话说,如果文章 1 的 name 字段包含一次“Foo”,而文章 2 的 body 字段包含两次“Foo”,则文章 1 的相关性仍然更高。

有没有办法做到这一点?我不是指布尔搜索,我想将相关性附加到实际的列数据,而不是搜索字符串。

【问题讨论】:

    标签: mysql search full-text-search


    【解决方案1】:

    您可以根据关键字的来源为关键字附加权重。因此,为表格中的单词赋予默认权重。当您在查询中得出一个分数时,将该分数与您的默认权重相乘。

    很明显,你的名字部分的单词会有更多的默认值。

    【讨论】:

    • 我的意思是同一个词应该有不同的权重,这取决于它来自哪里。例如,考虑这个伪 mysql FULLTEXT 列行数据:'fred:5 fred:1 fred:1'。也就是说fred:5来自name字段,fred:1在body中出现了两次。
    • 除非您在某个表格的某个位置维护此元信息,否则无法知道单词的来源。
    • 如果我们重新设计您的搜索表以多说两列 nameScore 和 bodyScore,那么在将数据插入搜索表时,您可以将 namecore 设置为 word1_from_name*5+ word2_from_name*5 等等。你类似地计算一个bodyScore。这样你就有了名字和身体的两个指示性分数。您可以使用这些值对最终结果进行排序。
    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 2011-12-22
    • 1970-01-01
    • 2017-01-16
    • 2022-08-23
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多