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”);