MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak wyszukiwać dokumenty w mongodb (pymongo), w których wszystkie słowa kluczowe występują w polu?

Rozważ użycie indeksu tekstowego z $text szukaj . Może to być znacznie lepsze rozwiązanie niż używanie wyrażeń regularnych. Jednak wyszukiwanie tekstowe zwraca dokumenty na podstawie algorytmu punktacji, więc możesz uzyskać wyniki, które nie zawierają wszystkich szukanych słów kluczowych.

Jeśli nie możesz lub nie chcesz dodać indeksu tekstowego do tego pola, użycie pojedynczego wyrażenia regularnego byłoby dość uciążliwe, ponieważ nie znasz kolejności, w jakiej pojawiają się te słowa. Nie twierdzę, że nie da się pisać, ale skończysz z okropną obrzydliwością nawet dla standardów regex. O wiele łatwiej byłoby użyć operatora regex wiele razy, używając $and operator.

Ponadto użycie spacji jako separatora nie powiedzie się, gdy słowo znajduje się na początku lub na końcu ciągu lub następuje po nim kropka lub przecinek. Użyj tokena ograniczającego słowo (\b ).

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

Należy pamiętać, że jest to naprawdę powolne zapytanie, ponieważ spowoduje uruchomienie tych trzech wyrażeń regularnych w każdym dokumencie z kolekcji. Gdy jest to zapytanie krytyczne pod względem wydajności, poważnie zastanów się, czy indeks tekstowy naprawdę się nie sprawdzi. Jeśli to się nie uda, ostatnią kroplą do uchwycenia byłoby wyodrębnienie dowolnych słów kluczowych z documenttextfield pole, które ktoś mógłby wyszukać (które może być każdym unikalnym słowem w nim) w nowym polu tablicy documenttextfield_keywords , utwórz normalny indeks w tym polu i wyszukaj to pole za pomocą $all operator (w tym przypadku nie jest wymagane wyrażenie regularne).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uzyskać dane z mongodb między włączeniem dwóch dni w mongodb przy użyciu mongoose?

  2. Zaktualizuj wiele w manguście

  3. Aktualizacja słownika w Mongodb

  4. Can kafka connect - źródło mongo działa jako klaster (max.tasks> 1)

  5. Przecięcie indeksu MongoDB