Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

Full text search FTS 全文检索模块移植到Odoo 8.0绿色版经验及后续需求



  • 有感于新odoo的论坛,文档管理,邮件等含大量文本内容的搜索标准功能中只能用SQL中的Like加通配符% ,也就是说只能模糊查询特定字符串,而不能真正像搜索引擎那样用时搜索多个关键字。幸好7.0版本中有个全文检索的模块。下载下来经过一番折腾,终于在绿色版的8.0上装上了,也基本能用了,现分享一些心得,也提出一些改善需求<br />要改2个文件,3 个地方<br />1 fts_base下的_openerp_.ini<br />里的update_xml 改为data, 变这样 'data': ["fts_proxy.xml", 'wizard/fts_config.xml'],<br /><br />2.fts_base.py <br />2.1 因为pool里没有DB属性了,第40行 去掉.DB, 变成这样        cr = self.pool.cursor()<br />2.2 因为使用to_tsquery时如果输入多个关键字其中有空格的话,系统会报错,查询字符串不会法, 改为 plainto_tsquery就可以了(fts_proxy里也要改)<br /><br />除了fts_base,我还安装了fts_document,fts_mail,装上后要重启系统,就会在setting configure 下多一个full text 的配置菜单,点那个对应的生成索引按钮,等一会儿后在对应的ir_attachment,mail_message表里面会增加一个存放索引字串的栏位,一个对应的索引和触发器,就可以去message旁边那个full text search顶层菜单上搜索已启用全文搜索功能的内容了(正如FTS文档所说,可以将实现跨模块统一全文检索,类似ERP内的google)。<br /><br />昨晚折腾了很久,终于初步将此全文检索功能扩展到论坛模块,也就是直接在论坛模块就可实现全文搜索问题,答案及评论。<br />主要的思路及做法如下<br />1.继承fts_base,在forum_post表上增加全文检索栏位<br />class Fts_Forum(fts_base):<br />    _model = 'forum.post'<br />    _indexed_column = 'content'<br />    _title_column = 'name'<br />2.继承forum post,扩展search函数,获取搜索文本,参考fts base直接使用全文检索的SQL语句取得ID清单,<br />特别的地方有两个,<br />    1.是默认情况下因为传到search函数中的filter已经有parent_id = blank的内容(此类记录表示是回复answer),需要去掉这种条件,不然就搜不到答案里的内容,<br />    2.论坛的评论comment并不保存在forum_post表里,而是保存在mail_message里的,所以在search函数中如果要同时搜索评论,还要去mail_message表中全文检索一下,再合并。<br />代码即文档,见附件<br /><br /><br />目前的问题<br />1. 索引不支持中文,在windows 7上还不知道怎么安装zhparser<br />2. fts base的全文检索出来的清单不支持双击跳转到显示对应的resource,如文档,邮件或论坛<br />3. 还需要增加对问题标题及邮件主题的全文检索<br />4. 其实可以考虑做成通用的全文检索,增加ORM定义时一个全文检索栏位属性,最终实现在定义search view时可以使用全文检索栏位,ORM可以自动转换为对应的全文检索SQL语句,用这样的方式使全文检索变成ORM的一部分。<br /><br />注,本人非专职程序员,大家多提意见,多交流。



  • 有感于新odoo的论坛,文档管理,邮件等含大量文本内容的搜索标准功能中只能用SQL中的Like加通配符% ,也就是说只能模糊查询特定字符串,而不能真正像搜索引擎那样用时搜索多个关键字。幸好7.0版本中有个全文检索的模块。下载下来经过一番折腾,终于在绿色版的8.0上装上了,也基本能用了,现分享一些心得,也提出一些改善需求<br />要改2个文件,3 个地方<br />1 fts_base下的_openerp_.ini<br />里的update_xml 改为data, 变这样 'data': ["fts_proxy.xml", 'wizard/fts_config.xml'],<br /><br />2.fts_base.py <br />2.1 因为pool里没有DB属性了,第40行 去掉.DB, 变成这样        cr = self.pool.cursor()<br />2.2 因为使用to_tsquery时如果输入多个关键字其中有空格的话,系统会报错,查询字符串不会法, 改为 plainto_tsquery就可以了(fts_proxy里也要改)<br /><br />除了fts_base,我还安装了fts_document,fts_mail,装上后要重启系统,就会在setting configure 下多一个full text 的配置菜单,点那个对应的生成索引按钮,等一会儿后在对应的ir_attachment,mail_message表里面会增加一个存放索引字串的栏位,一个对应的索引和触发器,就可以去message旁边那个full text search顶层菜单上搜索已启用全文搜索功能的内容了(正如FTS文档所说,可以将实现跨模块统一全文检索,类似ERP内的google)。<br /><br />昨晚折腾了很久,终于初步将此全文检索功能扩展到论坛模块,也就是直接在论坛模块就可实现全文搜索问题,答案及评论。<br />主要的思路及做法如下<br />1.继承fts_base,在forum_post表上增加全文检索栏位<br />class Fts_Forum(fts_base):<br />    _model = 'forum.post'<br />    _indexed_column = 'content'<br />    _title_column = 'name'<br />2.继承forum post,扩展search函数,获取搜索文本,参考fts base直接使用全文检索的SQL语句取得ID清单,<br />特别的地方有两个,<br />    1.是默认情况下因为传到search函数中的filter已经有parent_id = blank的内容(此类记录表示是回复answer),需要去掉这种条件,不然就搜不到答案里的内容,<br />    2.论坛的评论comment并不保存在forum_post表里,而是保存在mail_message里的,所以在search函数中如果要同时搜索评论,还要去mail_message表中全文检索一下,再合并。<br />代码即文档,见附件<br /><br /><br />目前的问题<br />1. 索引不支持中文,在windows 7上还不知道怎么安装zhparser<br />2. fts base的全文检索出来的清单不支持双击跳转到显示对应的resource,如文档,邮件或论坛<br />3. 还需要增加对问题标题及邮件主题的全文检索<br />4. 其实可以考虑做成通用的全文检索,增加ORM定义时一个全文检索栏位属性,最终实现在定义search view时可以使用全文检索栏位,ORM可以自动转换为对应的全文检索SQL语句,用这样的方式使全文检索变成ORM的一部分。<br /><br />注,本人非专职程序员,大家多提意见,多交流。



  • 在 8.0正式版安装 这三个addons 后 后台的 菜单上的搜索没问题,<br />前台website的 forums 模块上的论坛一搜索出现 500错误 <br /><br /><br />Error  <br /><br />Error message: <br />'NoneType' object has no attribute '_columns'<br /><br />⁠<br /><br /><br /><br /> Traceback  <br /><br /><br />Traceback (most recent call last):<br />  File "/home/lv/g101/source/addons/website/models/ir_http.py", line 204, in _handle_exception<br />    response = super(ir_http, self)._handle_exception(exception)<br />  File "/home/lv/g101/source/openerp/addons/base/ir/ir_http.py", line 100, in _handle_exception<br />    return request._handle_exception(exception)<br />  File "/home/lv/g101/source/openerp/http.py", line 596, in _handle_exception<br />    return super(HttpRequest, self)._handle_exception(exception)<br />  File "/home/lv/g101/source/openerp/addons/base/ir/ir_http.py", line 126, in _dispatch<br />    result = request.dispatch()<br />  File "/home/lv/g101/source/openerp/http.py", line 614, in dispatch<br />    r = self._call_function(**self.params)<br />  File "/home/lv/g101/source/openerp/http.py", line 283, in _call_function<br />    return checked_call(self.db, *args, **kwargs)<br />  File "/home/lv/g101/source/openerp/service/model.py", line 113, in wrapper<br />    return f(dbname, *args, **kwargs)<br />  File "/home/lv/g101/source/openerp/http.py", line 280, in checked_call<br />    return self.endpoint(*a, **kw)<br />  File "/home/lv/g101/source/openerp/http.py", line 733, in call<br />    return self.method(*args, **kw)<br />  File "/home/lv/g101/source/openerp/http.py", line 376, in response_wrap<br />    response = f(*args, **kw)<br />  File "/home/lv/g101/source/addons/website_forum/controllers/main.py", line 106, in questions<br />    question_count = Post.search(cr, uid, domain, count=True, context=context)<br />  File "/home/lv/g101/source/openerp/api.py", line 237, in wrapper<br />    return old_api(self, *args, **kwargs)<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 154, in search<br />    filters = self._get_filter_expression(cr, uid, args, context).to_sql()<br />  File "/home/lv/g101/source/openerp/api.py", line 237, in wrapper<br />    return old_api(self, *args, **kwargs)<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 118, in _get_filter_expression<br />    args = get_applicable_args(expression.normalize_domain(args), 0)[0]<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 106, in get_applicable_args<br />    op1 = get_applicable_args(args, index + 1)<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 106, in get_applicable_args<br />    op1 = get_applicable_args(args, index + 1)<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 106, in get_applicable_args<br />    op1 = get_applicable_args(args, index + 1)<br />  File "/home/lv/g101/source/openerp/addons/fts_forum/fts_forum.py", line 92, in get_applicable_args<br />    args[index][0] in orm_model._columns or<br />AttributeError: 'NoneType' object has no attribute '_columns'<br /><br /><br />想写个产品tfs搜索...<br />


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待