权限、列表、排序、搜索
2017-03-29 00:00
204 查看
摘要: 在一定的数据权限下,显示列表,如何支持字段排序
在业务系统中经常要求实现:支持按数据权限控制,模糊查询,指定的列排序。目前在工作中遇到了这样的问题,使用了如下的解决方案,仅供参考。
权限控制,该项目的数据权限主要依靠部门组织进行控制,当然还有一些例外。实现的主要方法:
将权限分解为小段,使用redis进行交、并、差的集合操作。使用redis缓存提高性能,在redis内实现分页。
其实是模拟了数据库查询的方式,将数据库需要做的任务交给了redis,理由是如果使用数据库进行处理,则会拼接非常复杂的SQL查询语句。数据库索引的效果大打折扣。另外因为交、并、差操作由代码控制,可以有更大的优化空间。缺点是要维护缓存和数据库的一致性,以及交、并、差的操作需要应用控制,对开发有一定的要求。
模糊查询需要支持大部分字段(类似文件类型字段除外)。我们选择使用ElasticSearch进行全文索引,这里有一个点是,搜索要支持的和原文档不一定一致,也就是跨文档查询的问题,导至文档和数据库并不完全一致。
按指定的列排序,目前没有实现,主要是研究了技术方案,主要有两个技术方案。
●使用redis 排序。
使用hash结构保存数据,在使用对应的字段进行排序。缺点是不能支持多字段排序,且需要在查询的时候解析文档、对性能有一定的影响。
●使用ElasticSearch排序
使用ElasticSearch排序可以多列排序,需要对Es 的mapping调整,要实现全文搜索的同时可以按值排序。在允许用户自定义字段时(数据的字段是不完全相同),对同步的实时性有影响。以及对数据的一致性有更高的要求。
mapping
search & sort
个人建议使用ElasticSearch排序,对性能的影响较小,且可以多列排序。
在业务系统中经常要求实现:支持按数据权限控制,模糊查询,指定的列排序。目前在工作中遇到了这样的问题,使用了如下的解决方案,仅供参考。
权限控制,该项目的数据权限主要依靠部门组织进行控制,当然还有一些例外。实现的主要方法:
将权限分解为小段,使用redis进行交、并、差的集合操作。使用redis缓存提高性能,在redis内实现分页。
其实是模拟了数据库查询的方式,将数据库需要做的任务交给了redis,理由是如果使用数据库进行处理,则会拼接非常复杂的SQL查询语句。数据库索引的效果大打折扣。另外因为交、并、差操作由代码控制,可以有更大的优化空间。缺点是要维护缓存和数据库的一致性,以及交、并、差的操作需要应用控制,对开发有一定的要求。
模糊查询需要支持大部分字段(类似文件类型字段除外)。我们选择使用ElasticSearch进行全文索引,这里有一个点是,搜索要支持的和原文档不一定一致,也就是跨文档查询的问题,导至文档和数据库并不完全一致。
按指定的列排序,目前没有实现,主要是研究了技术方案,主要有两个技术方案。
●使用redis 排序。
使用hash结构保存数据,在使用对应的字段进行排序。缺点是不能支持多字段排序,且需要在查询的时候解析文档、对性能有一定的影响。
●使用ElasticSearch排序
使用ElasticSearch排序可以多列排序,需要对Es 的mapping调整,要实现全文搜索的同时可以按值排序。在允许用户自定义字段时(数据的字段是不完全相同),对同步的实时性有影响。以及对数据的一致性有更高的要求。
mapping
{ "title": { "type": "string", "boost": 9, "analyzer": "autocomplete", "search_analyzer":"standard", "fields": { "raw": { "type": "string", "index": "not_analyzed" } } } }
search & sort
{ "sort": [{ "title.raw": {"order": "desc"} }], "query":{ "term": { "title": "pagos" } } }
个人建议使用ElasticSearch排序,对性能的影响较小,且可以多列排序。
相关文章推荐
- 【IOS开发】搜索和排序(好友列表,通讯录的实现,searchbar)
- AngularJS实现产品列表(页面搜索,排序)
- 泛型列表(List)的搜索和排序
- Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能,并挤压效果
- Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能
- iOS每日一记之———————————————一个简单的列表排序 还有模糊搜索
- Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能,并挤压效果(一)
- Android联系人列表,实现ListView的A-Z字母排序和过滤搜索功能,字母条目上顶
- convert-sorted-list-to-binary-search-tree(转换排序列表到二进制搜索树)
- 对象的比较与排序(七):对泛型列表进行排序和搜索:Comparison<T>和Predicate<T>的应用
- 对泛型列表进行排序和搜索
- Thinkphp列表搜索排序-----查
- 搜索加商品列表加排序
- [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)
- 如何为SPS的列表库设置权限
- 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
- JavaScript中实现数组的排序、乱序和搜索
- 权限对象和配置文件列表报表
- 一个实现下拉列表内汉字内容排序的例子
- 使用lucene对搜索结果排序