sql >> Databáze >  >> NoSQL >> MongoDB

Jak se dotazovat na dokumenty v mongodb (pymongo), kde všechna klíčová slova existují v poli?

Zvažte použití textového indexu s $text hledat . Může to být mnohem lepší řešení než použití regulárních výrazů. Textové vyhledávání však vrací dokumenty založené na skórovacím algoritmu, takže můžete získat některé výsledky, které neobsahují všechna klíčová slova, která hledáte.

Pokud nemůžete nebo nechcete do tohoto pole přidat textový index, bylo by použití jednoho regulárního výrazu docela nepříjemné, protože neznáte pořadí, ve kterém se tato slova objevují. Netvrdím, že se to nedá napsat, ale skončíte s hroznou ohavností i pro regex standardy. Bylo by mnohem jednodušší použít operátor regulárního výrazu vícekrát pomocí $and operátor.

Také použití mezery jako oddělovače selže, když je slovo na začátku nebo na konci řetězce nebo po něm následuje tečka nebo čárka. Použijte token hranice slova (\b ).

collection.find(
    { $and : [
              {'documenttextfield': {'$regex': '\b' +keyword1+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword2+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword3+'\b'}},
         ]
    });

Mějte na paměti, že toto je opravdu pomalý dotaz, protože spustí tyto tři regulární výrazy v každém jednotlivém dokumentu kolekce. Pokud se jedná o dotaz kritický pro výkon, vážně zvažte, zda textový index opravdu nebude fungovat. Pokud se tak nestane, poslední kapkou, kterou bychom měli pochopit, by bylo extrahovat klíčová slova z documenttextfield pole, které by někdo mohl vyhledat (což může být každé jedinečné slovo v něm), do nového pole documenttextfield_keywords , vytvořte v tomto poli normální index a vyhledejte v tomto poli pomocí $all operátor (v tomto případě není vyžadován žádný regulární výraz).




  1. MongoDB není správně nainstalován na Ubuntu 11.04 v Amazon EC2

  2. MongoDB Replica Set:Rozdíl ve velikosti disku v primárních a sekundárních uzlech

  3. Proč se mi zobrazuje toto zastaralé varování?! MongoDB

  4. Apache Hadoop Ozone Security – Autentizace