Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

120
Vistas
¿Cómo puedo usar SearchRank en un campo de modelo de Django?

Tengo una publicación modelo:

 class Post(models.Model): post_title = models.CharField(max_length=120) post_subtitle = models.TextField() post_text = models.TextField() vector_column = SearchVectorField(null=True) class Meta: indexes = (GinIndex(fields=['vector_column']),)

y he creado un disparador en la base de datos para actualizar el valor de vector_column :

 create function core_post_trigger() returns trigger as $$ begin new.vector_column := setweight(to_tsvector('pg_catalog.english', coalesce(new.post_title, '')), 'A') || setweight(to_tsvector('pg_catalog.english', coalesce(new.post_subtitle, '')), 'B') || setweight(to_tsvector('pg_catalog.english', coalesce(new.post_text, '')), 'C'); return new; end $$ language plpgsql; create trigger vector_column_trigger before insert or update on core_post for each row execute procedure core_post_trigger();

Y busco a través de este modelo así:

 Post.objects.filter(vector_column=SearchQuery(query, config='english', search_type='websearch')

Aunque apliqué ponderaciones en esta búsqueda, no apliqué clasificación ( to_tsrank ). Sé que puedo aplicar rango en Django así:

 vector = SearchVector('post_title', weight='A', config='english') + SearchVector('post_subtitle', weight='B', config='english') + SearchVector('post_text', weight='C', config='english') query = SearchQuery(query, search_type='websearch') Post.objects.annotate(rank=SearchRank(vector, query)).order_by('-rank')

La pregunta es que no sé cómo usar SearchRank con mi columna vector_column , ya que esta columna tiene un GinIndex. Si utilizo esta variable vector creada anteriormente, no utilizaré el índice y esta búsqueda será lenta. He intentado escribir esta consulta de varias maneras, pero no sé cómo hacerlo. Probé, por ejemplo, esto:

 Post.objects.annotate(SearchRank(vector_column, SearchQuery('Angel', config='english'))).order_by('-rank')

Pero arroja un error vector_column is not defined .

¿Cómo puedo lograrlo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo encontré. Necesitaba usar una expresión F :

 Post.objects.annotate( rank=SearchRank(F('vector_column'), SearchQuery(query, config='english')) ).order_by('-rank'), 15
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda