搜索限制/慢速默认搜索?

时间:2014-05-13 06:23:24

标签: python postgresql search openerp

有这种方法:

 def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
        if args is None:
            args = []
        if context is None:
            context = {}
        ids = []
        if name:
            ids = self.search(cr, uid, [('name', operator, name)] + args, limit=limit)
        if not ids:
            ids = self.search(cr, uid, [('city_id', operator, name)] + args, limit=limit)
        if not ids:
            ids = self.search(cr, uid, [('street_id', operator, name)] + args, limit=limit)        
        return self.name_get(cr, uid, ids, context=context)

它可以找到你想要的东西,但由于某种原因它在没有提供搜索词的情况下搜索得非常慢(注意。如果它会返回所有记录,那就不奇怪了,但它仍然返回最多160条记录)。

这个问题很少。首先它出于某种原因限制搜索160条记录,即使你查看方法,它显示100.如果我改为任何数字,它仍然返回160条记录的最大记录。看起来该参数不会覆盖默认值160。

现在另一个问题是,当我在搜索行中输入任何短语时,它会很快找到结果,无论发现多少结果都无关紧要,因为它限制为160.这没关系。但是如果我没有提供任何短语来搜索并在openerp界面中按下小三角形(箭头)(请看下面的截图)

enter image description here

当我删除address completion字段中的搜索短语时,会发生同样的事情。然后它也默认为默认搜索,它按照zip(邮政编码)列顺序查找前160个记录。出于某种原因,这种方式搜索速度要慢得多。我只注意到导入地址时的性能很慢(现在行数超过400k)。

有谁知道如何改进这种所谓的默认搜索或至少限制返回记录,以便提高性能? (正如我之所说的那样,将limit=更改为其他某个数字并没有做任何事情。)

了解问题的简单示例:

第一个例子:

我在City1字段中写短语address completion。它找到前160条记录City1。搜索很快。

第二个例子:

我不会在address completion字段中写任何内容,而是按下小箭头(屏幕截图中的那个),打开详细搜索。它按邮政编码顺序查找前160条记录。搜索很慢。

第3个例子:

我从City1字段删除了书面短语address completion(在我写完之后)。它找到与第二个例子中相同的记录。搜索很慢。

P.S 如果有人需要有关ORM方法中标准OpenERP参数的信息(如我提供的那样):https://doc.openerp.com/6.0/developer/2_5_Objects_Fields_Methods/methods/

1 个答案:

答案 0 :(得分:0)

删除订单行(按邮政编码排序),显着提高了速度。我想如果没有人知道更好的建议,这应该是一个很好的解决方案。

在代码中更具体一点是这一行:

_order = 'name' #name field is for postal code.

我删除了它。