Serve una soluzione per il problema del filtro dati

-3

Dichiarazione del problema: Ho un input con più coppie di valori chiave e un elenco di attività memorizzate nel database con oggetto filtro. Come output ho bisogno di un elenco di attività che corrispondono ai valori di input in base all'oggetto filtro dell'attività.

Esempio:

Input (dalla richiesta http):

{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3",
    "key4": "value4",
    "key5": "value5",
    "key6": "value6",
}

Elenco attività (memorizzato in mongodb o cassandra):

{
    "task": "task1"
    "filter": {
        "key1": "value1",
        "key2": "value2",
    }
}

{
    "task": "task2"
    "filter": {
        "key3": "value3",
        "key5": "value5",
    }
}

{
    "task": "task3"
    "filter": {
        "key3": "value3",
        "key4": "value12",
    }
}

{
    "task": "task4"
    "filter": {
        "key2": "value2",
        "key6": "value6",
    }
}


{
    "task": "task5"
    "filter": {
        "key1": "value1",
        "key7": "value7",
    }
}

{
    "task": "task6"
    "filter": {
        "key3": "value3",
        "key4": "value4",
    }
}

Output previsto:

{
    tasks: [task1, task2, task4, task6]
}

Qui, il filtro di task1 atrributes corrisponde al sottoinsieme degli attributi di input, ad esempio key1 & key2 (analogamente per task2, task4, task6), ma per task3 & gli attributi del filtro task5 non corrispondono al sottoinsieme dell'input.

Ho bisogno di una soluzione in grado di recuperare in modo efficiente l'elenco delle attività in base all'input. Ho provato un paio di cose come generare tutte le possibili combinazioni di attributi di input e database di ricerca per ciascuna combinazione, ma era molto inefficiente.

Se non è una soluzione reale, puoi fornirmi suggerimenti che posso provare o qualsiasi algoritmo in grado di risolvere questo problema.

    
posta user3820681 21.07.2016 - 14:44
fonte

1 risposta

0

Forse il modo più efficace è quello di archiviare tutte le attività con le rispettive chiavi del filtro, in modo da tenere traccia di key1 e associare task1 e task5 con esso.

È quindi possibile scorrere ogni chiave di input per aggiungere l'insieme di attività per quella chiave a un set di risultati e quindi contare il numero di volte in cui ogni attività viene visualizzata nei risultati. Per ogni attività che appare il numero di volte uguale alle chiavi del filtro in quell'attività, hai una corrispondenza.

    
risposta data 21.07.2016 - 14:54
fonte

Leggi altre domande sui tag