Sphinx - 以逗号分隔的字符串

时间:2016-05-26 12:38:41

标签: php sphinx

Sphinx中,我想搜索逗号分隔字符串中的短语。

例如,逗号分隔的字符串为Very Expensive,Luxury,Romance,Trendy

短语"Expensive"不应与此记录匹配,但短语"Very Expensive"应匹配。

在sphinx配置文件中尝试设置Phrase Boundary选项并再次旋转索引器,但输出没有变化。

phrase_boundary                 =  U+002C # comma
phrase_boundary_step            =  100

我正在使用Sphinx 2.0.5 PHP作为脚本语言。

2 个答案:

答案 0 :(得分:1)

我如何解决这个问题,(索引标签)是使用特定的分隔符。例如将其索引为

_SEP_ Very Expensive _SEP_ Luxury _SEP_ Romance _SEP_ Trendy _SEP_ 

现在可以运行查询"_SEP_ Very Expensive _SEP_"(带引号)并且匹配良好,但查询"_SEP_ Expensive _SEP_"将不匹配:)

(可以在sql_query中动态构建,例如

... , CONCAT('_SEP_ ',REPLACE(labels,',',' _SEP_ '),' _SEP_') AS labels, ...

(至少对于mysql数据源)

答案 1 :(得分:0)

您可以使用Extended query syntax来使用field-startfield-end修饰符。在这种情况下,您需要在索引时将逗号分隔的字符串(“非常昂贵”,“豪华”等)分解为单独的字段。

您的搜索查询将如下所示:

^Very Expensive$ - 匹配整个字段

^Expensive$ - 与整个字段不匹配