我正在使用狮身人面像,我正在做多词搜索。
在结果数组中有一个“匹配”数组和一个“单词”数组,但我不知道如何链接它们。
IE:我搜索“dance eat”,结果是“Dancing with bla bla”。所以我知道匹配的术语是“舞蹈”......但我不知道如何让狮身人面像告诉我。
你有什么想法吗?可能吗?
我正在使用狮身人面像,我正在做多词搜索。
在结果数组中有一个“匹配”数组和一个“单词”数组,但我不知道如何链接它们。
IE:我搜索“dance eat”,结果是“Dancing with bla bla”。所以我知道匹配的术语是“舞蹈”......但我不知道如何让狮身人面像告诉我。
你有什么想法吗?可能吗?
结果集并没有告诉你。
您可以使用 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 数组包含与每个结果匹配的单词列表。
最好的解决方案是 BuildKeywords 之类的,但您仍然会错过 ids :
[0] => Array
(
[tokenized] => keyword1
[normalized] => p5162
[docs] => 3
[hits] => 7
)
[1] => Array
(
[tokenized] => keyword2
[normalized] => m340
[docs] => 15
[hits] => 23
)
^ 也许有办法获取 [docs] ids ?