如何使Sphinx更松散地匹配?

时间:2014-09-12 15:41:47

标签: php sphinx

我正在使用PHP库中的默认设置,并且正在使用最新版本的Sphinx(2.2.3)。我需要让搜索结果更松散地匹配。以下是sphinx.conf中的索引设置:

morphology     = stem_en
min_word_len   = 1
min_prefix_len = 1
prefix_fields = name
expand_keywords = 1

如果我在我的网站上搜索Nexus 7,则会显示大量搜索结果(Nexus 7平板电脑,然后是大量配件),但如果我搜索ASUS New Nexus 7 FHD Tablet, Black,那么只有平板电脑出现(没有配件)。这就像Sphinx没有显示配件,因为它们不包含搜索中的所有关键字。

如何让Sphinx更加“松散”地匹配项目,以便不完全匹配的项目仍然显示?

2 个答案:

答案 0 :(得分:1)

使用Quorum语法,是控制它的方法,

http://sphinxsearch.com/docs/current.html#extended-syntax

例如

$terms = '"'.$client->EscapeQuery($_POST['terms']).'"/0.7';

这样你就可以完全控制现在需要很多单词。 - 例如,该示例中70%的单词。可以改变它的确切比例 - 或者使用一定数量的单词ef

$terms = '"'.$client->EscapeQuery($_POST['terms']).'"/3';

需要三个字。

比任何允许的匹配更好,这只需要一个单词。在示例中,所有文档即使只是 7'匹配将包括在内。


但要清楚的是,没有“魔法”。解决方案,这使得完美的模糊'匹配。它始终基于comprimises使其看起来像搜索是智能的。您可能需要进行大量调整才能获得可接受的结果 - 并且可能使用多种技术组合。

答案 1 :(得分:0)

我猜你正在使用PECL sphinx模块进行PHP ...

您要考虑将setMatchMode()设置为SPH_MATCH_ANY

$terms = $_POST['terms'];
$client = new SphinxClient();
$client->SetMatchMode(SPH_MATCH_ANY);
$res = $client->Query($terms, 'your_index');
...

更多细节可以在这里找到...... http://php.net/manual/en/sphinxclient.setmatchmode.php