我需要一些帮助来在 django 视图中使用 GIN 索引为全文搜索构建正确的查询。我有一个相当大的数据库(约 40 万行),需要对其中的 3 个字段进行全文搜索。尝试使用django 文档搜索,这是 GIN 之前的代码。它有效,但需要 6 秒以上的时间来搜索所有字段。接下来,我尝试实现GIN索引以加快搜索速度。已经有很多问题如何构建它。但我的问题是 -使用 GIN 索引进行搜索时,视图查询如何更改?我应该搜索哪些字段?
在 GIN 之前:
models.py
class Product(TimeStampedModel):
product_id = models.AutoField(primary_key=True)
shop = models.ForeignKey("Shop", to_field="shop_name")
brand = models.ForeignKey("Brand", to_field="brand_name")
title = models.TextField(blank=False, null=False)
description = models.TextField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
视图.py
def get_cosmetic(request):
if request.method == "GET":
pass
else:
search_words = request.POST.get("search")
search_vectors = (
SearchVector("title", weight="B")
+ SearchVector("description", weight="C")
+ SearchVector("brand__brand_name", weight="A")
)
products = (
Product.objects.annotate(
search=search_vectors, rank=SearchRank(search_vectors, search)
) …
Run Code Online (Sandbox Code Playgroud) postgresql gwt-gin django-models django-queryset django-views
更新
我已提交功能请求。我们的想法是pass
对IntegrittyError
的时候由数据库产生unique
或unique_together
拒绝已经存在于数据库中的记录。
我有以下模型:
class Compositions(models.Model):
composer_key = models.ForeignKey(
Composer,
)
composition = models.CharField(
max_length=383,
)
class Meta(object):
unique_together = (('composer_key', 'composition'), )
Run Code Online (Sandbox Code Playgroud)
在管理界面中使用 django-import-export,而不为id
csv 文件中的每个条目提供一个,...如果一对 csv 文件已经存在,该过程将因完整性错误而中断
duplicate key value violates unique constraint "data_compositions_composer_key_id_12f91ce7dbac16bf_uniq"
DETAIL: Key (composer_key_id, composition)=(2, Star Wars) already exists.
Run Code Online (Sandbox Code Playgroud)
CSV 文件如下:
id composer_key composition
1 Hot Stuff
2 Star Wars
Run Code Online (Sandbox Code Playgroud)
这个想法是skip_row
在管理员中使用和实现它。
管理.py:
class CompositionsResource(resources.ModelResource):
class Meta:
model = Compositions
skip_unchanged …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 Django Web 服务器上安全地配置Celery,我可以找出两种实现此目的的替代方法。保护代理或签署消息。
Celery,需要一个消息代理,在这种情况下是RabbitMQ。
我正在使用“RabbitMQ 即服务”实现,这意味着使用amqp协议通过互联网访问 RabbitMQ 服务器。
服务商分发了一个amqp uri,同时也支持 amqps:
“amqps”URI 方案用于指示客户端与服务器建立安全连接。
为了使用 amqps,celery 需要以下配置:
import ssl
BROKER_USE_SSL = {
'keyfile': '/var/ssl/private/worker-key.pem',
'certfile': '/var/ssl/amqp-server-cert.pem',
'ca_certs': '/var/ssl/myca.pem',
'cert_reqs': ssl.CERT_REQUIRED
}
Run Code Online (Sandbox Code Playgroud)
问题:
在哪里可以找到这些.pem
文件?
根据RabbitMQ docs,我必须自己创建它们并配置 RabbitMQ 服务器以使用它们。
但是,我没有运行服务器。如上所述,我有一个支持 amqps 的“RabbitMQ 即服务”提供者。我应该让他给我提供那些.pem
文件吗?
芹菜,也可以签名消息。
(尝试这种方法,我收到了我报告的No encoder installed for auth
错误。)
问题:这是否意味着我可以使用我的证书来保护连接作为替代配置BROKER_USE_SSL
?
还有一个关于消息签名的说明:
auth 序列化程序不会加密消息的内容,因此如果需要,必须单独启用它。
子问题:加密消息的内容是否可以保护我免受“当前”RabbitMQ …
我想弄清楚如何使用Django Import-Export,
https://pypi.python.org/pypi/django-import-export
通过阅读文档
https://django-import-export.readthedocs.org/en/latest/getting_started.html#admin-integration
对于我的基本python知识,示例代码与其后面的结果照片之间的差距似乎很大.
我设法编写以下代码:
geographic_system/models.py:
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Regional_Units(models.Model):
regional_unit = models.CharField(
max_length=64, verbose_name=_(u'Regional Units'))
def __unicode__(self):
return u'%s' % (self.regional_unit)
Run Code Online (Sandbox Code Playgroud)
geographic_system/resources.py:
from import_export import resources
from geographical_system.models import Regional_Units
from import_export.admin import ImportExportModelAdmin
class Regional_Units_Resource(resources.ModelResource):
class Meta(object):
model = Regional_Units
class Regional_Units_Resource_Admin(ImportExportModelAdmin):
resouce_class = Regional_Units_Resource # Why originally commented out?
#pass #Why pass?
Run Code Online (Sandbox Code Playgroud)
geographic_system/admin.py:
from django.contrib import admin
from geographical_system.models import …
Run Code Online (Sandbox Code Playgroud) $ yum install python3 postgresql python-devel libpqxx-devel
Loaded plugins: langpacks, refresh-packagekit
Package python3-3.3.2-8.fc20.x86_64 already installed and latest version
Package postgresql-9.3.2-2.fc20.x86_64 already installed and latest version
Package python-devel-2.7.5-9.fc20.x86_64 already installed and latest version
Package 1:libpqxx-devel-3.2-0.5.fc20.x86_64 already installed and latest version
Nothing to do
Run Code Online (Sandbox Code Playgroud)
我想在我的virtualenv中安装psycopg2来连接django和postgresql数据库.
在Fedora 19和postgresql-9.2中,pg_config的路径是:
/usr/pgsql-9.2/bin
在Fedora 20中,该目录不存在.
但是可以在中找到pg_config /usr/bin/pg_config
.
试图安装psycopg2:
$ export PATH=$PATH:/usr/bin; pip install psycopg2
Downloading/unpacking psycopg2
Downloading psycopg2-2.5.2.tar.gz (685kB): 685kB downloaded
Running setup.py egg_info for package psycopg2
... -compiling output here- ...
gcc -pthread …
Run Code Online (Sandbox Code Playgroud) 我有带有标题和描述字段的模型。
我想为标题和描述字段中的所有单词创建一个 GIN 索引
所以我使用 SQL 按以下方式执行此操作:
第 1 步:使用简单的配置创建一个包含标题和描述中所有单词的表格
CREATE TABLE words AS SELECT word FROM ts_stat('SELECT to_tsvector(''simple'',COALESCE("articles_article"."title", '''')) || to_tsvector(''simple'',COALESCE("articles_article"."description", '''')) FROM "articles_article"');
Run Code Online (Sandbox Code Playgroud)
STEP2:创建GIN索引
CREATE INDEX words_idx ON words USING GIN (word gin_trgm_ops);
Run Code Online (Sandbox Code Playgroud)
第三步:搜索
SELECT word, similarity(word, 'sri') AS sml
FROM words
WHERE word % 'sri'
ORDER BY sml DESC, word;
Result:
word sml
sri 1
srila 0.5
srimad 0.428571
Run Code Online (Sandbox Code Playgroud)
如何在 DJANGO 中执行此操作,而且我还必须不断更新 GIN 索引
Word1 Word2 Word3 ... Wordx LastWord
Word1 Word2 Word3 ... Wordx LastWord
Run Code Online (Sandbox Code Playgroud)
我怎么可能添加"|" 在每行的最后一个单词之前,使用vim中的Regex返回以下结果?
Word1 Word2 Word3 ... Wordx | LastWord
Word1 Word2 Word3 ... Wordx | LastWord
Run Code Online (Sandbox Code Playgroud) 我有一个通用视图,有时不返回任何内容。
在这种情况下,我如何有效地处理它并引发 404?
我的方法成功了,但命中了数据库。
class MyListView(ListView):
template_name = 'template/quest.html'
def get_queryset(self, *args, **kwargs):
query = (
MyModel.objects
.filter(...)
.filter(...)
)
if query.exists():
return query
else:
raise Http404
Run Code Online (Sandbox Code Playgroud) 我有以下用户对象,
class User(AbstractBaseUser, PermissionsMixin, Base):
username = models.CharField(
db_index=True,
null=False,
unique=True,
max_length=255,
)
mobile = PhoneNumberField(
db_index=True,
null=False,
unique=True,
)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)
我有以下课程来管理连接,
class Connections(Base):
owner = models.OneToOneField(
User,
on_delete=models.CASCADE,
null=True,
)
friends = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='friend_set',
null=True,
blank=True,
)
followers = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='follower_set',
null=True,
blank=True,
)
followings = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='following_set',
null=True,
blank=True,
)
Run Code Online (Sandbox Code Playgroud)
当我尝试添加好友时,
sender = User.objects.get(
id=kwargs.get('sender_id')
)
receiver = User.objects.get(
id=kwargs.get('receiver_id')
)
sender_connections, created =( …
Run Code Online (Sandbox Code Playgroud) 在 spf13 配置上运行 vim,我有以下问题:
在 python 文件中,执行 PymodeLintAuto 后,已拆分几行以符合 pep8,但其中一行旁边有一个感叹号,其下一行旁边有一个加号,如图所示:
在我的 .vimrc.local 文件中也可以找到相同的标志,但状态行的右下角会出现警告:
!
和符号的含义是什么+
?我如何纠正我的代码以使警告消失?
我认为该+
符号表明该行是相对于文件的先前版本添加的。标志是否应该!
表明该行包含已更正的错误?
例如,该! trailing[164]
消息表明该符号位于 164 行旁边,并带有尾随空格?!
(但是,第 37 行没有这样的尾随空格)
照明细节:
涉及到的模块有:
最后,侧面的感叹号和右下角的感叹号没有任何关系。