【问题标题】:Sphinx search order by tags狮身人面像按标签搜索顺序
【发布时间】:2012-10-23 11:26:02
【问题描述】:

我有两张桌子

Table 1: Profiles table: p_id, p_title, p_presentation, p_date

Table 2: Tags table: tag_id, profile_id, tag_text

我想检查标签以匹配搜索:

例如: 标签: 汽车;红色汽车;大车

当我搜索“汽车”时,我只需要完全匹配。我不在乎“红车”标签。

例如,我需要一个正常的搜索 (SPH_MATCH_EXTENDED2)。

所以我想显示带有确切标签的配置文件(比如说 20 个配置文件结果),然后是下一个结果,例如按 p_date 排序。

谢谢

【问题讨论】:

    标签: php mysql search sphinx


    【解决方案1】:

    我是怎么做到的……

    sql_query = SELECT p_id, p_title, ..., \
                GROUP_CONCAT(tag_id) AS tag_ids, \
                CONCAT('_SEP_ ',GROUP_CONCAT(tag_text SEPERATOR ' _SEP_ '),' _SEP_') AS tag_text \
                FROM Profiles LEFT JOIN Tags ON (profile_id=p_id)
    sql_attr_multi = uint tag_ids from field;
    

    然后你可以使用短语操作符来搜索精确的标签,例如

    "_SEP_ car _SEP_"
    

    与“大车”不匹配

    字段开始/结束修饰符不起作用,因为每个文档可以有多个标签。

    【讨论】:

    • 我正在使用其他方法进行排序: $cl->SetSelect("*,IN(tag_id,1)+IN(tag_id,2)+IN(tag_id,3) as mytags");它运行良好,但有一个例外。例如,当我有 700 个结果时..所以我需要重复 IN(tag_id,n) 700 次,我没有得到任何结果..对于 400 个结果它有效。您还有其他想法来循环 id 以获取订单吗?
    • 修正:$cl->SetSelect("*, IN(tag_id, 1, 2, 3, n) as mytags");
    【解决方案2】:

    来自Sphinx docs

    例如,查询“^hello world$”(带有引号,因此结合了短语运算符和开始/结束修饰符)将只匹配包含至少一个具有这两个关键字的字段的文档。

    您可以使用开始和结束修饰符来获得准确的结果。将此与引用一起使用。

    "^car$"
    

    希望这会有所帮助!

    【讨论】:

    • 是的,但不仅要匹配那两个词。我想要 tag_text =“你好世界”。字段 == 搜索
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多