我正在使用Sphinx而且我正在进行多项搜索。
在结果数组中有一个'matches'数组和一个'words'数组,但我不知道如何链接它们。
I.E:我寻找“舞蹈吃”,我的结果是“与bla bla一起跳舞”。所以我知道匹配的术语是“舞蹈”......但我不知道如何让狮身人面像告诉我。
你有什么想法吗?有可能吗?
答案 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?