mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
implement batched index retrieval in filter matching
improvement only for prefix/suffix matching for now
This commit is contained in:
committed by
Dan Christian Bogos
parent
52aa161331
commit
2078c93758
@@ -102,18 +102,25 @@ func MatchingItemIDsForEvent(ev utils.MapStorage, stringFldIDs, prefixFldIDs, su
|
||||
} else if filterIndexTypes[i] == utils.MetaSuffix {
|
||||
fldVals = utils.SplitSuffix(fldVal) // all suffix till first digit
|
||||
}
|
||||
|
||||
idxKeys := make([]string, 0, len(fldVals))
|
||||
for _, val := range fldVals {
|
||||
var dbIndexes map[string]utils.StringSet // list of items matched in DB
|
||||
key := utils.ConcatenatedKey(filterIndexTypes[i], fldName, val)
|
||||
if dbIndexes, err = dm.GetIndexes(cacheID, itemIDPrefix, true, true, key); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
err = nil
|
||||
continue
|
||||
}
|
||||
return
|
||||
idxKeys = append(idxKeys,
|
||||
utils.ConcatenatedKey(filterIndexTypes[i], fldName, val))
|
||||
}
|
||||
var indexes map[string]utils.StringSet
|
||||
if indexes, err = dm.GetIndexes(cacheID, itemIDPrefix, true, true, idxKeys...); err != nil {
|
||||
if err == utils.ErrNotFound {
|
||||
err = nil
|
||||
continue
|
||||
}
|
||||
return
|
||||
}
|
||||
for _, key := range idxKeys {
|
||||
if itemIDs, exists := indexes[key]; exists {
|
||||
dbItemIDs = itemIDs
|
||||
break // longest prefix wins
|
||||
}
|
||||
dbItemIDs = dbIndexes[key]
|
||||
break // we got at least one answer back, longest prefix wins
|
||||
}
|
||||
for itemID := range dbItemIDs {
|
||||
if _, hasIt := itemIDs[itemID]; !hasIt { // Add it to list if not already there
|
||||
|
||||
Reference in New Issue
Block a user