有这种方法:
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界面中按下小三角形(箭头)(请看下面的截图)
当我删除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/
答案 0 :(得分:0)
删除订单行(按邮政编码排序),显着提高了速度。我想如果没有人知道更好的建议,这应该是一个很好的解决方案。
在代码中更具体一点是这一行:
_order = 'name' #name field is for postal code.
我删除了它。