搜索限制/慢速默认搜索?
这里有一个方法:
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界面中按下小三角形(箭头)(见下方截图)
当我在地址补全
字段中删除搜索短语时,也会发生同样的事情。它会回到默认搜索,这样就会找到按邮政编码排序的前160条记录。奇怪的是,这种方式搜索的速度要慢得多。我注意到这种慢性能是在我导入地址后(现在有超过40万行数据)。
有没有人知道怎么改善这个所谓的默认搜索,或者至少限制返回的记录数量,这样可能会提高性能?(正如我所说,改变limit=
为其他数字似乎没有任何效果)。
简单的例子来理解问题:
第一个例子:
我在地址补全
字段中写下短语City1
。它找到前160条包含City1
的记录。搜索很快。
第二个例子:
我在地址补全
字段中什么也不写,而是按下小箭头(截图中的那个),打开详细搜索。它按邮政编码顺序找到前160条记录。搜索很慢。
第三个例子:
我从地址补全
字段中删除已写的短语City1
(在我写完之后)。它找到的记录和第二个例子一样。搜索很慢。
附言:如果有人需要关于标准OpenERP参数在ORM方法中的信息(就像我提供的那样):https://doc.openerp.com/6.0/developer/2_5_Objects_Fields_Methods/methods/
1 个回答
删除了按邮政编码排序的订单行,这样速度明显提高了。我想如果没有人有更好的建议,这应该是个不错的解决办法。
具体来说,代码中有这一行:
_order = 'name' #name字段是用来表示邮政编码的。
我把它删掉了。