在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
作为脚本语言。
答案 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-start
和field-end
修饰符。在这种情况下,您需要在索引时将逗号分隔的字符串(“非常昂贵”,“豪华”等)分解为单独的字段。
您的搜索查询将如下所示:
^Very Expensive$
- 匹配整个字段
^Expensive$
- 与整个字段不匹配