Merge pull request #219 from redis/fix-unnecessary-commands-for-first-search-#218
Performance improvement for first - avoids unnecessary pagination.
This commit is contained in:
		
						commit
						49a4a1edbe
					
				
					 2 changed files with 39 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -749,7 +749,7 @@ class FindQuery:
 | 
			
		|||
 | 
			
		||||
    async def first(self):
 | 
			
		||||
        query = self.copy(offset=0, limit=1, sort_fields=self.sort_fields)
 | 
			
		||||
        results = await query.execute()
 | 
			
		||||
        results = await query.execute(exhaust_results=False)
 | 
			
		||||
        if not results:
 | 
			
		||||
            raise NotFoundError()
 | 
			
		||||
        return results[0]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ async def m(key_prefix, redis):
 | 
			
		|||
        last_name: str = Field(index=True)
 | 
			
		||||
        email: str = Field(index=True)
 | 
			
		||||
        join_date: datetime.date
 | 
			
		||||
        age: int = Field(index=True)
 | 
			
		||||
        age: int = Field(index=True, sortable=True)
 | 
			
		||||
        bio: str = Field(index=True, full_text_search=True)
 | 
			
		||||
 | 
			
		||||
        class Meta:
 | 
			
		||||
| 
						 | 
				
			
			@ -357,6 +357,43 @@ def test_validation_passes(m):
 | 
			
		|||
    )
 | 
			
		||||
    assert member.first_name == "Andrew"
 | 
			
		||||
 | 
			
		||||
@pytest.mark.asyncio
 | 
			
		||||
async def test_retrieve_first(m):
 | 
			
		||||
    member = m.Member(
 | 
			
		||||
        first_name="Simon",
 | 
			
		||||
        last_name="Prickett",
 | 
			
		||||
        email="s@example.com",
 | 
			
		||||
        join_date=today,
 | 
			
		||||
        age=99,
 | 
			
		||||
        bio="This is the bio field for this user.",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    await member.save()
 | 
			
		||||
 | 
			
		||||
    member2 = m.Member(
 | 
			
		||||
        first_name="Another",
 | 
			
		||||
        last_name="Member",
 | 
			
		||||
        email="m@example.com",
 | 
			
		||||
        join_date=today,
 | 
			
		||||
        age=98,
 | 
			
		||||
        bio="This is the bio field for this user.",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    await member2.save()
 | 
			
		||||
 | 
			
		||||
    member3 = m.Member(
 | 
			
		||||
        first_name="Third",
 | 
			
		||||
        last_name="Member",
 | 
			
		||||
        email="t@example.com",
 | 
			
		||||
        join_date=today,
 | 
			
		||||
        age=97,
 | 
			
		||||
        bio="This is the bio field for this user.",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    await member3.save()
 | 
			
		||||
 | 
			
		||||
    first_one = await m.Member.find().sort_by("age").first()
 | 
			
		||||
    assert first_one == member3
 | 
			
		||||
 | 
			
		||||
@pytest.mark.asyncio
 | 
			
		||||
async def test_saves_model_and_creates_pk(m):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue