小编nik*_*ola的帖子

Django的搜索引擎解决方案实际上有效吗?

到目前为止的故事:

决定使用Xapian作为搜索后端,因为它具有我正在寻找的所有搜索引擎功能,了解Unicode,干扰,具有很少的依赖性,并且不需要在其上安装膨胀的应用服务器.

尝试过Django和Haystack(再加上xapian-haystack,将Haystack与Xapian联系在一起的后端粘合代码),因为它在很多博客上被宣传为"正常工作".不工作.django-haystack和xapian-haystack项目都没有提供实际协同工作的版本组合.两个项目的MASTER从Xapian产生错误,所以它根本不稳定.Haystack 1.0.1和xapian-haystack 1.0.x/1.1.0不兼容API.另外,在Haystack 1.0.1和xapian-haystack MASTER的最低工作安装中,由于django-haystack或xapian-haystack中的错误,任何复杂查询都会产生零结果(我对此进行了双重验证),可能是因为单元测试实际上测试非常简单的情况,根本没有边缘情况.

试过Djapian.源代码充满了拼写错误(请注意,变量名称,而不是注释),文档也充满了模糊和过时的信息,永远不会导致工作安装.毫不奇怪,用户很少要求功能,但如何让它首先工作.

下一篇文章:探索Solr(安装Java环境加上Tomcat让我感到头疼,机器受RAM和CPU约束)或Lucene(稍微不那么头疼,但仍然如此).

在我继续花费更多时间使用可能会或可能不如宣传的解决方案之前,我想知道:有没有人在Django中获得实际的,真实的搜索解决方案?我是认真的.我发现阅读"大部分问题大部分都解决了",然后意识到你永远不会从源代码中获得有效的安装,这真是令人沮丧,因为实际上,处理那些"主要解决问题"的所有博客都没有超过基本安装和复制粘贴官方教程.

所以这是要求:

  • 必须能够在一个查询中搜索10-100个术语
  • 必须处理+(术语必须存在)和 - (术语不得存在),和/或
  • 必须处理任意分组(即AND/OR周围的括号)
  • 必须允许在全文搜索之前或之后进行Django-ORM过滤(即使用Django知道的全套过滤器对结果进行预处理/后处理)
  • 或者,必须有一个工具来批量获取结果集并将其转换为QuerySet
  • 应该在机器上很轻,所以最好没有大量的JVM和基于Java的app-server安装

那有什么可以做到的吗?我对轶事证据不感兴趣,或者对一些声称应该有效的博客文章的引用感兴趣.我想听听那些真实拥有全功能设置的人在现实世界中,在真实条件下,真实查询.

编辑:

让我再说一遍,我对轶事证据并不是那么感兴趣,因为有人在某个地方有一个运行不正常的安装工具.我已经去过那里,我阅读了所有的博客文章,邮件列表,我联系了作者,但是当涉及实际场景的实际实现时,没有任何像宣传的那样工作.

此外,考虑到任何项目的总体拥有成本,下面的用户也提到了这一点,我绝对没有兴趣听到有人在一个供应商在未知数量的专家中跳伞的某个地方能够将其拉下来 - 使用特定的域知识对整个安装进行修补,这些知识无法记录.

所以,如果您声称您的工作安装实际上满足了全面搜索的最低要求(请参阅上述要求),请提供以下信息,以便我们都能从Django的搜索解决方案中获益,从而真正解决问题:

  • 确切的Linux发行版,发行版,
  • Haystack(或同等版本)的确切发布版本以及搜索后端的发布版本,
  • 搜索引擎的确切发布版本
  • 公开(!)可用文档如何完全按照安装设置的方式设置所有组件,以满足上述最低要求.

谢谢.

django search full-text-search search-engine xapian

30
推荐指数
4
解决办法
4626
查看次数

通过app_label在子目录中建模?

为了将我的模型子文件夹中我试图用app_label元字段描述这里.

我的目录结构如下所示:

  • 项目
    • 应用
      • FOO
        • 楷模
          • __init__.py
          • bar_model.py

在bar_model.py中,我将我的模型定义为:

from django.db import models

class SomeModel(models.Model):

    field = models.TextField()

    class Meta:
        app_label = "foo"
Run Code Online (Sandbox Code Playgroud)

我可以像这样成功导入模型:

from apps.foo.models.bar_model import SomeModel
Run Code Online (Sandbox Code Playgroud)

但是,运行:

./manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

不会为模型创建表.在详细模式中,我确实看到应用程序"foo"被正确识别(它在settings.py中的INSTALLED_APPS中).将模型移动到foo下的models.py确实有效.

是否有一些特定的约定没有记录在app_label中,或者整个机制阻止了这个模型结构被syncdb识别?

django django-models django-orm

15
推荐指数
1
解决办法
8385
查看次数

PyInstaller构建的Windows EXE因多处理而失败

在我的项目中,我使用Python的multiprocessing库在__main__中创建多个进程.使用PyInstaller 2.1.1将项目打包到单个Windows EXE中.

我创建了这样的新流程:

from multiprocessing import Process
from Queue import Empty

def _start():
    while True:
        try:
            command = queue.get_nowait()
        # ... and some more code to actually interpret commands
        except Empty:
            time.sleep(0.015)

def start():
    process = Process(target=_start, args=args)
    process.start()
    return process
Run Code Online (Sandbox Code Playgroud)

并在__main__:

if __name__ == '__main__':
    freeze_support()

    start()
Run Code Online (Sandbox Code Playgroud)

不幸的是,当将应用程序打包到EXE并启动它时,我WindowsError在这一行得到5或6(似乎是随机的):

command = queue.get_nowait()
Run Code Online (Sandbox Code Playgroud)

PyInstaller主页上的一个食谱声称我必须修改我的代码,以便在将应用程序打包为单个文件时在Windows中启用多处理.

我在这里复制代码:

import multiprocessing.forking
import os
import sys


class _Popen(multiprocessing.forking.Popen):
    def __init__(self, *args, **kw):
        if hasattr(sys, 'frozen'):
            # We have to set original …
Run Code Online (Sandbox Code Playgroud)

python windows pyinstaller multiprocessing python-2.7

12
推荐指数
2
解决办法
8001
查看次数

过滤Django Haystack的结果如QuerySet?

是否可以将Django Haystack搜索与"内置"QuerySet过滤操作相结合,特别是使用Q()实例和SearchQuerySet不支持的查找类型进行过滤?无论是哪种顺序:

haystack-searched -> queryset-filtered
Run Code Online (Sandbox Code Playgroud)

要么

queryset-filtered -> haystack-searched
Run Code Online (Sandbox Code Playgroud)

浏览Django Haystack文档没有给出任何指示如何执行此操作.

django django-queryset django-haystack

10
推荐指数
1
解决办法
8353
查看次数

从目录中快速读取文件名的方法?

给定一个本地目录结构/foo/bar,并假设给定路径只包含一个文件(文件名和内容无关紧要),获取该单个文件的文件名(不是文件内容)的合理快速方法是什么?

python path

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

解析布尔运算包括带正则表达式的括号?

是否有一个正则表达式可以解析表示简单布尔算术的字符串(在Python和/或Javascript中,不需要是相同的表达式)?例如,我想解析这个字符串:

a and (b and c) and d or e and (f or g)
Run Code Online (Sandbox Code Playgroud)

假设:
*括号不嵌套
*术语a,b,...,z不是子表达式

生成的捕获应首先按括号分组,然后再使用相同或更简单的正则表达式再次解析.

我已经成功地编写了一个天真的正则表达式来解析没有括号的布尔运算.

有任何想法吗?

javascript python regex

5
推荐指数
1
解决办法
3499
查看次数

setcontext() Valgrind 读取大小 8 无效

我目前面临一个非常奇怪的问题。我正在构建一个库并将其链接到我的程序。一切运行良好,没有分段错误(也用 gdb 检查),但是当我用 Valgrind 运行程序时,它会变得疯狂,行如下:

==11972== Invalid read of size 8
==11972==    at 0x509509C: setcontext (setcontext.S:73)
==11972==    by 0x509764F: ??? (in /lib/x86_64-linux-gnu/libc-2.15.so)
==11972==  Address 0x541f060 is 128 bytes inside a block of size 936 alloc'd
==11972==    at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11972==    by 0x402090: environment_get (env.c:99)
==11972==    by 0x401ED6: environment_new (env.c:36)
==11972==    by 0x40124B: thr_new (thr.c:156)
==11972==    by 0x400EBE: main (itest1.c:31)
Run Code Online (Sandbox Code Playgroud)

但程序运行良好,并且setcontext有一个正确分配的参数,没有任何问题。我有什么理由担心这些线条吗?

谢谢

c valgrind

5
推荐指数
1
解决办法
897
查看次数

限制App Engine对自定义域上的G Suite帐户的访问权限

不久之前,Google Apps(现在称为G Suite)域的App Engine相关设置已移至Google Cloud Console.

截至目前,通过此Google Cloud控制台页面,记录了将App Engine实例的访问权限限制为关联G Suite用户的方法:

在此输入图像描述

当您点击该页面中的[编辑]时,在"Google身份验证"下,您可以在"Google帐户API"和"Google Apps域"(实际上应该称为"G Suite域")之间切换.

在此输入图像描述

该下拉列表下方有一个输入框,但没有解释应该在那里输入什么.通过反复试验,我发现它应该是相关G Suite的域名.

在部署到App Engine的最小Hello World应用程序中,我们将身份验证选项设置为:

login: required
Run Code Online (Sandbox Code Playgroud)

请注意,我们的应用程序的一些服务是用Python编写的,其他服务是用Java编写的.

通过[project-id] .appspot.com主机名访问App引擎实例工作正常,Google将提示相关G Suite上的凭据,并通过身份验证过程适当地重定向到目标路径名.

问题是,当通过自定义域访问App Engine实例时,身份验证根本不起作用.这将显示500,服务器日志显示为:

只有在通过该域的子域提供请求或已通过Google Apps控制台批准请求时,才能执行Google Apps域example.com的身份验证.请参阅https://developers.google.com/appengine/articles/auth

该错误消息中的链接页面不再存在,即它已被替换为一般描述身份验证的页面.从在线缓存中提取旧页面,我可以看到它描述了将Google App项目添加到Google Apps服务页面的旧Google Apps方式,但截至目前,此功能已被删除或迁移到Google Cloud Console.

对于它的价值,谷歌支持无法提供任何帮助,除了指向上面截屏页面的文档.

这里是否有人通过自定义域限制App Engine访问G Suite帐户?或者这个功能刚刚破裂?

特别是我正在寻找在Python和/或Java GAE应用程序环境中解决此问题的答案,以及演示如何在需要时以编程方式解决此问题的代码.

python java google-app-engine google-cloud-platform

5
推荐指数
1
解决办法
1684
查看次数

无法从主机访问VMWare来宾Web服务器

软件:Mac OS X 10.5.8上的VMWare Fusion 2.05(也适用于Vista上的VMWare Workstation 6.5.2,用于验证问题)访客:Ubuntu Server 9.04(也适用于Ubuntu Desktop 9.04,用于修复问题) )VMWare网络:桥接路由器:Apple TimeCapsule,最新固件

问题:

在guest上成功安装Django 1.1并启动Django的内置web服务器(监听127.0.0.1:8000)之后,我通过wget 127.0.0.1:8000(以及Ubuntu Desktop 9.04上的Firefox)进行了验证,确实服务器工作正常.

但是,我无法从主机连接到Django服务器.

特别:

在桥接模式下,客户操作系统具有IP 172.16.1.6(由TimeCapsule通过DHCP分配),主机OS具有IP 172.16.1.2(由TimeCapsule通过DHCP分配).我可以从主机成功ping客户端,也可以从guest虚拟机ping主机.但是无法从主机操作系统访问端口8000上的Django服务器.

是否必须启用任何配置设置才能将Django服务器从guest虚拟机路由到主机?在Ubuntu,VMWare(工作站或Fusion),Vista或Mac OS X中?

编辑:

我找到了解决方案.在调用django-admin.py runserver时,有一个记录的可选参数ipaddr:port.将其设置为172.16.1.6(而不是默认值127.0.0.1)可以启用从guest虚拟机到主机的正确路由.

django virtualization vmware

4
推荐指数
1
解决办法
8399
查看次数

睡觉和蟒蛇醒来

我有一个Python脚本做一些工作,需要5分钟,然后它睡了一个小时,然后重新开始.现在我希望我的笔记本电脑能够在等待时保持睡眠而不是一直打开,并且大约每小时醒来只是为了完成工作.是否有可能睡觉并用Python唤醒?

我使用的是Windows 7.

python sleep windows-7

2
推荐指数
1
解决办法
5058
查看次数

如何匹配相同数据集的lomb-scargle和FFT图?

我正在做一些工作,比较一段时间内某些气体浓度的插值fft,其中不均匀采样,使用相同数据的lomb-scargle周期图.我正在使用scipy的fft函数来计算傅里叶变换,然后将其模数平方以得到我认为的功率谱密度,以十亿分之一(ppb)平方为单位.

我可以得到lomb-scargle图几乎与FFT的精确模式相匹配,但从不相同的幅度,FFT功率谱密度总是更高,即使我认为lomb-scargle功率是功率谱密度.现在我正在使用的lomb代码:http://www.astropython.org/snippet/2010/9/Fast-Lomb-Scargle-algorithm,将数据集标准化,取消平均值并除以数据方差的2倍,因此,我以相同的方式对FFT数据进行了归一化,但幅度仍然不匹配.

因此我做了一些更多的研究,发现标准化的坟墓疤痕能力可以无法完成,因此我不能将这些情节匹配.这引出了我的两个问题:

  1. 什么单位(如果有的话)是标准化的lim-scargle perioogram的功率谱密度?

  2. 在幅度和模式方面,我如何将我的fft情节与我的lomb-scargle情节相匹配?

谢谢.

python psd fft units-of-measurement

2
推荐指数
1
解决办法
2190
查看次数

在Django模板中翻译类似dict的值

在我的模型中,我定义了以下选项:

LANG_CHOICES = (
    ("Englisch", (
        (u"en-gb", u"England"),
        (u"en-us", u"United States of America"),
    ), )
Run Code Online (Sandbox Code Playgroud)

该字段定义为:

lang_source = models.CharField(max_length=5, choices=LANG_CHOICES, default="en-gb")
Run Code Online (Sandbox Code Playgroud)

当然,在我的模板中,我想要显示人类可读的值,即

{{ object.lang_source }}
Run Code Online (Sandbox Code Playgroud)

不应该打印"en-gb"(或相应的值)而是"英格兰".

实现这一目标的最优雅方式是什么?(除了在视图中从模型导入dict并手动翻译值.)

django django-templates

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