如何为sphinx查询设置更具体的规则?

时间:2011-08-10 04:26:35

标签: php mysql sql search-engine sphinx

我有一个包含电影和电视剧列表的数据库。 我构建的搜索使用了Sphinx。

我使用SPH_MATCH_ANY模式,因为我希望如果一个人搜索“x-men 2”,他也会找到关于“x-men 1”和“x-men 3”的条目。

我的问题是,它还搜索带有“2”的条目,例如“Cars 2”或“Supernatural season 2”。

我想告诉它不要搜索其中没有'x-men'的条目。 在MYSQL中,我会这样写:

MATCH (mname) AGAINST ('x-men') AND mname like '%x-men%' 

或类似的东西。

在Sphinx中我尝试了这个:

$s->Query(x-men 2 "x-men",'test1');

但它仍在搜索数字为“2”的条目..

那我怎么能做到呢?

谢谢。

2 个答案:

答案 0 :(得分:1)

好的问题解决了,来自Sphinx论坛的人给了我这个解决方案:

$s->setMatchMode(SPH_MATCH_EXTENDED2);
$s->Query("(x-men | 2) x-men",test1);
$s->setRankingMode(SPH_RANK_ANY);

=)

答案 1 :(得分:0)

你需要像计算机一样思考......对我们来说很明显,“x-men”这个词比“2”更有意义,但对于一台计算机来说它们是相等的。

你总是可以告诉sphinx使用wordforms

将“x-men 1”,“x-men 2”和“x-men 3”索引到同一索引
x-men 1 > xmen
x-men 2 > xmen
x-men 3 > xmen

所以如果有人搜索“x-men 2”,他会看到3部电影的结果。或者你可以告诉sphinx不要索引单个数字,或设置min length for indexes

然而,用户可能会抱怨他们只想看到“x-men 2”而不是其他电影的信息。

在我看来,在配置搜索引擎时,你不必猜测用户想要的结果,因为不同的用户会期望不同的结果,但你应该总是给他工具改进他的搜索。例如,一个人会期望x-men 2返回所有x-men电影,另一个人会期望它返回仅与x-men 2相关的信息,以及(为什么不呢?)有人会期望它返回所有电影包含单词“x-men”和“2”...你不能让每个人都开心= P

祝你好运