相关疑难解决方法(0)

Django MySql 全文搜索有效,但在测试中无效

我使用这个问题在 Django 应用程序中的 mysql 数据库上启用全文搜索。

# models.py

class CaseSnapshot(BaseModel):
    text = models.TextField(blank=True)


class Search(models.Lookup):
    lookup_name = "search"

    def as_mysql(self, compiler, connection):
        lhs, lhs_params = self.process_lhs(compiler, connection)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params
        return f"MATCH (%s) AGAINST (%s IN BOOLEAN MODE)" % (lhs, rhs), params


models.TextField.register_lookup(Search)
Run Code Online (Sandbox Code Playgroud)

因为Django不支持mysql上的全文搜索,所以我们必须添加我们的索引,所以我们修改生成的迁移文件:

# Generated by Django 2.2 on 2020-04-28 03:41

from django.db import migrations, models

# Table details
table_name = "by_api_casesnapshot"
field_name = "text"
index_name = f"{table_name}_{field_name}_index"


class Migration(migrations.Migration):

    dependencies …
Run Code Online (Sandbox Code Playgroud)

mysql django full-text-search django-orm

3
推荐指数
1
解决办法
1566
查看次数

使用Django queryset在列中搜索多个单词

我有一个自动完成框,需要返回包含输入单词的结果.然而,输入词可以是部分的并且以不同的顺序或位置定位.

例:

数据库列(MySQL)中的值 -

Expected quarterly sales
Sales preceding quarter
Profit preceding quarter
Sales 12 months
Run Code Online (Sandbox Code Playgroud)

现在,如果用户输入,quarter sales那么它应该返回前两个结果.

我试过了:

column__icontains = term  #searches only '%quarter sales% and thus gives no results
column__search = term  #searches any of complete words and also returns last result
**{'ratio_name__icontains':each_term for each_term in term.split()}   #this searches only sales as it is the last keyword argument
Run Code Online (Sandbox Code Playgroud)

通过正则表达式的任何技巧或可能是我在Django中内置的东西,因为这是一个常见的模式?

django django-queryset

0
推荐指数
1
解决办法
2875
查看次数