Sphinx中的多项查询:哪个术语匹配哪个结果?

时间:2013-05-24 14:30:06

标签: full-text-search search-engine sphinx

我正在使用Sphinx而且我正在进行多项搜索。

在结果数组中有一个'matches'数组和一个'words'数组,但我不知道如何链接它们。

I.E:我寻找“舞蹈吃”,我的结果是“与bla bla一起跳舞”。所以我知道匹配的术语是“舞蹈”......但我不知道如何让狮身人面像告诉我。

你有什么想法吗?有可能吗?

2 个答案:

答案 0 :(得分:0)

结果集没有告诉你。

您可以使用BuildExcerpts函数来突出显示结果。查看摘录可显示哪些关键字匹配。

编辑:原型代码......

$ids = array_keys($res["matches"]);
$stemmed_words = array_keys($res['words']);
$query_words = explode(' ',trim(preg_replace('/[^\w]+/',' ',$q)));

$docs = array();
foreach ($ids as $c => $id) {
    $docs[$c] = strip_tags($rows[$id]['body']);
}
$reply = $cl->BuildExcerpts($docs, $CONF['sphinx_index'], $q);

$matches = array();
foreach ($ids as $c => $id) {
    if (preg_match_all('/<b>(\w+)<\/b>/',$reply[$c],$m)) {
        $matches[$id] = array();
        foreach ($m[1] as $document_word) {
            $best_distance = 99999;
            $best_index = -1;
            foreach ($stemmed_words as $stemmed_index => $stemmed_word) {
                $distance = levenshtein(strtolower($document_word),$stemmed_word);
                if ($distance < $best_distance) {
                    $best_distance = $distance;
                    $best_index = $stemmed_index;
                }
            }
            if ($best_index > -1)
                $matches[$id][] = $query_words[$best_index];
        }
    }
}

$ matches数组包含与每个结果匹配的单词列表。

答案 1 :(得分:0)

最好的解决方案就像BuildKeywords,但你仍然会错过ID:

[0] => Array
        (
                [tokenized] => keyword1
                [normalized] => p5162
                [docs] => 3
                [hits] => 7
        )

[1] => Array
        (
                [tokenized] => keyword2
                [normalized] => m340
                [docs] => 15
                [hits] => 23
        )

^ 也许有办法获得[docs] ID?