使用标题确定SphinxQL中的可能类别

时间:2014-06-22 09:04:32

标签: php mysql match sphinx

我有一个拥有超过6000万条SphinxQL 2.1.1索引记录的数据库。每个记录都有一个标题和一个catid(除其他外)。当一条新记录被插入到数据库中时,我试图让sphinx根据标题中的文本猜测catid。

我设法让它适用于单词这样的话:

SELECT @groupby, catid, count(*) c FROM sphinx WHERE MATCH('*LANDLORDS*') group by catid order by c desc

然而,实际的标题可能是这样的:

Looking for Landlords - Long term lease - No fees!!!

有没有办法将整个标题字符串转储到sphinx并让它分解每个单词并执行某种模糊匹配,返回最可能的类别?

1 个答案:

答案 0 :(得分:2)

因为这样的狮身人面像不是神奇的,并且它没有“模糊匹配”。功能。

但可以近似一个:)两个主要步骤......

  1. 从要求所有单词'变为只需要一些,

  2. 改变排名,努力做出最好的交叉点。在查询和标题之间,获得高权重,因此“泡沫”#39;到顶部。

  3. 然后可以采取最佳结果,并将其作为最佳猜测'。

    (实际上有三分之一,单词谎言'''可能导致大量误报,所以可能想要排除它们,或者使用停用词索引,或者只是从查询中剥离)

    此类查询的原型可能类似于

    SELECT catid FROM sphinx WHERE MATCH('"Looking Landlords Long term lease No fees"/1') OPTION ranker=wordcount LIMIT 1;
    

    使用仲裁来影响匹配,并选择不同的排名。


    将此版本与分组一起使用,可能不会起作用,因为它会包含许多低质量的匹配。虽然可以尝试使用av​​g或sum来获得复合权重?

    SELECT SUM(WEIGHT()) as w, catid FROM sphinx WHERE MATCH('"Looking Landlords Long term lease No fees"/1') GROUP BY catid ORDER BY w DESC OPTION ranker=wordcount LIMIT 1
    

    有很多方法可以调整这个......

    您可以尝试其他的游戏玩家,例如matchany。甚至一些自定义排名表达式。

    或者更改法定人数,例如,需要1个字的等级,可能会导致至少少数。

    或者如果可以提取短语,例如

    '"看房东" | "长期租约" | "没有费用"'

    可能有效吗?

    也可以而不是仅仅取得最高结果,取得前5-10个结果,并将其全部显示给用户,因为结果非常接近。