0

我正在使用狮身人面像,我正在做多词搜索。

在结果数组中有一个“匹配”数组和一个“单词”数组,但我不知道如何链接它们。

IE:我搜索“dance eat”,结果是“Dancing with bla bla”。所以我知道匹配的术语是“舞蹈”......但我不知道如何让狮身人面像告诉我。

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

4

2 回答 2

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 数组包含与每个结果匹配的单词列表。

于 2013-05-24T14:35:18.973 回答
0

最好的解决方案是 BuildKeywords 之类的,但您仍然会错过 ids :

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

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

^ 也许有办法获取 [docs] ids ?

于 2013-05-24T15:38:43.063 回答