Cassandra:基于集合中的一个特定值进行过滤

问题描述

我在Cassandra中有一个数据表,其中一列是:

customer_favourites,每个值都是已设置的类型,并且包含每个客户喜欢的食物的详细信息。例如,一个客户可能有{'Mexican','Italian','Indian'},而另一个客户可能有{'Mexican','french'},而另一个客户可能有{'Mexican'}

我有以下代码

SELECT customer_id,customer_fname,customer_lname FROM customers WHERE customer_favourites CONTAINS ‘Mexican’ ALLOW FILTERING;

我希望它过滤那些只喜欢墨西哥食物的顾客,但是现在它返回每个将墨西哥作为他们最喜欢食物之一的顾客的详细信息。如何过滤查询以返回只喜欢墨西哥菜的顾客?

解决方法

天真的方法:您需要使用Application has thrown an uncaught exception and is terminated: Error: Cannot find module 'tslib' Require stack: - D:\home\site\wwwroot\main.js - D:\Program Files (x86)\iisnode\interceptor.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15) at Function.Module._load (internal/modules/cjs/loader.js:687:27) at Module.require (internal/modules/cjs/loader.js:849:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (D:\home\site\wwwroot\main.js:91:18) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) at Module.<anonymous> (D:\home\site\wwwroot\main.js:225:63) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) at Object.<anonymous> (D:\home\site\wwwroot\main.js:216:18) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) Tue Oct 06 2020 08:16:28 GMT+0000 (Greenwich Mean Time): Application has thrown an uncaught exception and is terminated: Error: Cannot find module 'tslib' Require stack: - D:\home\site\wwwroot\main.js - D:\Program Files (x86)\iisnode\interceptor.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15) at Function.Module._load (internal/modules/cjs/loader.js:687:27) at Module.require (internal/modules/cjs/loader.js:849:19) at require (internal/modules/cjs/helpers.js:74:18) at Object.<anonymous> (D:\home\site\wwwroot\main.js:91:18) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) at Module.<anonymous> (D:\home\site\wwwroot\main.js:225:63) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) at Object.<anonymous> (D:\home\site\wwwroot\main.js:216:18) at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30) ...

更好的方法-在相应的字段using the FULL keyword上创建二级索引,然后使用customer_favourites = {'Mexican'}

最佳方法-创建一个以customer_favourites = {'Mexican'}作为分区键的单独表,并在其中搜索用户(列应为customer_favourites)。这种方法的问题之一是数据偏斜,因为喜欢的食物数量相对较少并且非常不平衡。

替代方法-如果需要非常频繁地通过非分区键进行搜索,请重新考虑使用Cassandra。