The correct name for MongoDB index definition property is weights not weight. Using "weight" will cause "Index with name ... already exists with different options"
52 lines
1.2 KiB
ReStructuredText
52 lines
1.2 KiB
ReStructuredText
===========
|
|
Text Search
|
|
===========
|
|
|
|
After MongoDB 2.4 version, supports search documents by text indexes.
|
|
|
|
|
|
Defining a Document with text index
|
|
===================================
|
|
Use the *$* prefix to set a text index, Look the declaration::
|
|
|
|
class News(Document):
|
|
title = StringField()
|
|
content = StringField()
|
|
is_active = BooleanField()
|
|
|
|
meta = {'indexes': [
|
|
{'fields': ['$title', "$content"],
|
|
'default_language': 'english',
|
|
'weights': {'title': 10, 'content': 2}
|
|
}
|
|
]}
|
|
|
|
|
|
|
|
Querying
|
|
========
|
|
|
|
Saving a document::
|
|
|
|
News(title="Using mongodb text search",
|
|
content="Testing text search").save()
|
|
|
|
News(title="MongoEngine 0.9 released",
|
|
content="Various improvements").save()
|
|
|
|
Next, start a text search using :attr:`QuerySet.search_text` method::
|
|
|
|
document = News.objects.search_text('testing').first()
|
|
document.title # may be: "Using mongodb text search"
|
|
|
|
document = News.objects.search_text('released').first()
|
|
document.title # may be: "MongoEngine 0.9 released"
|
|
|
|
|
|
Ordering by text score
|
|
======================
|
|
|
|
::
|
|
|
|
objects = News.objects.search('mongo').order_by('$text_score')
|