我使用这个问题在 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)中的值 -
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中内置的东西,因为这是一个常见的模式?