我正在使用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更加“松散”地匹配项目,以便不完全匹配的项目仍然显示?
答案 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