Last active
October 3, 2021 15:18
-
-
Save cpatrick/5719077 to your computer and use it in GitHub Desktop.
Sample Python for running a full-text search using PyMongo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pymongo import Connection | |
if __name__ == '__main__': | |
# Connect to mongo | |
conn = Connection() | |
db = conn['canepi'] | |
# Set the search term | |
term = 'foo' | |
# Run the search | |
results = db.command('text', 'healthmap', search=term) | |
# Print the results | |
print(results) |
For pymongo against mongodb 3.2...
Given a collection of documents like
{'textfield': 'cool stuff in a doc', 'other': 'fields...'}
To perform the query, and get results sorted by the textual score:
db.my_collection.create_index([('textfield','text')])
cursor = db.my_collection.find(
{'textfield': 'some string query'},
{'_txtscr': {'$meta': 'textScore'}
).sort([('_txtscr', {'$meta':'textScore'})])
@nod that only searches for an exact string match with the entire text, and not substrings as the $text command specifies.
I just explored for 3.2 and this should work:
import pymongo
client = pymongo.MongoClient()
db = client['some_db']
collection = db["some_collection"]
collection.insert({"textfield": "cool stuff in a doc"})
collection.create_index([('textfield', 'text')])
search_this_string = "stuff"
print collection.find({"$text": {"$search": search_this_string}}).count()
thanks @legel! Super helpful!
thanks @legel!
Awesome @legel!
how to do multiple text search, for eg: search for word1 and word2 together in the text sentence?
@saamkhya
I ended up with the following for scoring the documents with multiple words:
cursor = collection.find(
{'$text': {'$search': 'some words'}},
{'score': {'$meta': 'textScore'}})
# Sort by 'score' field.
cursor.sort([('score', {'$meta': 'textScore'})])
Make sure you index the collection first.
Source: https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/cursor.py#L658
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
What about mongo 3.x version?
I have this: pymongo.errors.OperationFailure: command SON([('text', '...'), ('search', '...')]) on namespace ....$cmd failed: no such command: text