Php Sphinx按标记的搜索顺序

Php Sphinx按标记的搜索顺序,php,mysql,search,sphinx,Php,Mysql,Search,Sphinx,我有两张桌子 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个配置文件结果)显

我有两张桌子

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排序

感谢来自以下网站的

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

可以使用“开始”和“结束”修改器来获得准确的结果。将此与引号一起使用

"^car$"
希望这会有帮助

我是怎么做的

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_"
哪辆车和“大轿车”不匹配


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

是的,但不仅仅是为了匹配这两个词。我想要tag_text=“hello world”。field==searchIm使用其他方法进行排序:$cl->SetSelect(“*,IN(tag_id,1)+IN(tag_id,2)+IN(tag_id,3)as mytags”);它运行良好,只有一个例外。例如,当我有700个结果时,我需要在(tag_id,n)中重复700次,我没有得到结果。对于400个结果,它是有效的。您是否有其他方法来循环订单id?修复:$cl->SetSelect(“*,IN(tag_id,1,2,3,n)as mytags”);