search - NoSQL - 如何正确实现自动建议和最佳匹配?
问题描述
我们正在构建汽车及其属性的数据库,应该存储在 DynamoDB 中。
创建一个表并用具有,等cars
属性的对象填充它很容易。brand
model
year
但我们还需要管理界面中的一些其他功能:
打字时的建议
创建汽车时,应在输入字段时建议现有汽车的品牌和型号。
我们是否应该在另一个表中维护品牌和型号列表,并在用户键入时对该表进行查询?
或者查询汽车定义的“丰富”表并获取所有值、具有特定值的所有值等是否brand
足够好?我的第一个想法是这将是一项繁重的操作,我们需要一个单独的汽车和模型索引。但我不是 NoSQL 专家......model
brand
最佳匹配
在我们的系统中注册新车时,我们希望尽可能使用现有定义的汽车作为参考。
因此,当用户输入品牌、型号、年份等时,我们希望显示最佳匹配的几个选项 - 我们可以接受他们的年份等不同,但首先希望最佳匹配。
对 NoSQL 数据库中的数据进行此类匹配的最佳方法是什么?任何指向工具、概念等的链接将不胜感激:)
提前致谢
解决方案
在dynamodb(全是nosql)中,你创建的表越少,你的架构就越好(这是我们使用nosql的主要原因之一),所以不需要新表,只需添加一个新属性并用可搜索的数据填充它您需要,请记住,通过 dynamodb 进行的查询区分大小写,您只能使用begin_with或contains函数来查询数据
缺点是:
- 您将使用大量阅读容量单位
- 你必须管理大写字母
- 您必须在每次创建时构造可搜索属性
我建议的解决方案是使用 aws cloudsearch,它提供了一个开箱即用的建议器,您将获得更好的结果并提供更好的用户体验,每次您有一个新项目时,cloudsearch 中的索引都是自动的,但请注意定价,但是他们会给你 30 天免费
推荐阅读
- firebase - firebase 数据库规则允许在特定节点上写入
- javascript - MiniZinc CSP 到 JSON - 数组中的迭代解决方法 javascript
- javascript - 将文本颜色限制为黑色
- c - 用于将十进制转换为任何基数(从 2 到 36)的 C 代码
- android - Flutter - remove space between items in ListView
- r - 如何在 RShiny 中将列名与 FluidRow 合并
- java - 从java知道远程IP已连接
- opendaylight - 使用 Opendaylight 的链路聚合控制协议
- spring - 涡轮机不适用于 spring boot 2.0.6 和 spring cloud Finchley.SR1
- pdf - 创建附加在一起的所有条形图的 pdf