The same result may be found with different result ranks
in the same search loop when housenumber or postcode are
part of the name or address. In this case we need to keep
the result with the lower result rank.
Fixes #1264.
$oValidTokens->debugTokenByWordIdList()
);
- $aResults += $oSearch->query(
+ $aNewResults = $oSearch->query(
$this->oDB,
$this->iMinAddressRank,
$this->iMaxAddressRank,
$this->iLimit
);
+ // The same result may appear in different rounds, only
+ // use the one with minimal rank.
+ foreach ($aNewResults as $iPlace => $oRes) {
+ if (!isset($aResults[$iPlace])
+ || $aResults[$iPlace]->iResultRank > $oRes->iResultRank) {
+ $aResults[$iPlace] = $oRes;
+ }
+ }
+
if ($iQueryLoop > 20) break;
}