将匹配排序靠近字符串的开头

时间:2014-11-08 15:09:25

标签: sphinx

有一个表,其中包含站点URL。 我想以某种方式对Sphinx结果进行排序:“关键字越接近字符串的开头 - 越相关”

“foobar.com,barfoo.com,barbarfoo.com”是关键字“foo”的正确结果集

我试过了:

$s = new SphinxClient;
$s->setServer("localhost", 9312);
$s->SetMatchMode(SPH_MATCH_ALL);
$s->SetSortMode(SPH_SORT_RELEVANCE);
$s->SetFieldWeights(array(
                         'id' => 0,
                         'url' => 1000,
                    ));
$result = $s->query("foo");

不幸的是,我得到了按ID排序的结果。

1 个答案:

答案 0 :(得分:0)

嗯,不要以为狮身人面像可以直接做到这一点。有各种排名因素,但都基于单词。

可以使用'min_prefix_len'匹配部分单词,但是无法获得'匹配发生的单词',以便能够对其进行排名。

唯一的方法是可以使用sphinx,也就是使用wordbreaker http://sphinxsearch.com/blog/2013/01/29/a-new-tool-in-the-trunk-wordbreaker/

将域名索引为单独的单词。希望您的域名在“foo bar com”,“bar foo com”,“bar bar foo com”中正确分割 - 然后可以按字位排名,例如min_hit_pos http://sphinxsearch.com/docs/current.html#field-factors