首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RavenDb -按某物在子集中的次数进行查询

RavenDb -按某物在子集中的次数进行查询
EN

Stack Overflow用户
提问于 2013-07-09 16:22:57
回答 1查看 266关注 0票数 1

考虑到包含品牌的下列伪数据模型“商店”:

代码语言:javascript
复制
Shop:
{
   Id ... etc ...
   Name: "General sports store",
   Brands: {"Adidas", "Nike", "Puma"}
}

给出一个特定的品牌清单,我想找到销售类似商品的商店。

例如,考虑到以下商店:

  • 耐克镇:耐克
  • 其他一些商店:耐克,阿迪达斯
  • 错店:雨果老板

当我寻找“耐克,阿迪达斯”,我想找到“耐克镇”和“其他商店”,因为他们有我们的品牌。

“其他商店”应该是第一个结果,因为它销售我们所要求的大多数品牌。(我能用助推吗?)

但是,不应该找到“错店”,因为它没有我们要求的任何品牌.

我应该如何使用RavenDb来处理这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-09 18:03:23

如果输入是单个"Nike, Adidas"字符串,那么首先需要删除逗号,因为它不是数据库中标记"Nike“的一部分。

但这样你就可以正常搜索了。您描述的行为是默认的。提高是不需要的,因为多场比赛已经有一个更高的分数,并提高到顶端。

代码语言:javascript
复制
var searchTerms = "Nike, Adidas";
searchTerms = searchTerms.Replace(",", "");
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms);

然而,我注意到有些术语是多个单词("Hugo“)。这将抛出搜索,因为它期待的是单个单词标记。换句话说,这不会返回任何结果:

代码语言:javascript
复制
var searchTerms = "Hugo Boss";
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms);

你有一些如何处理这件事的选择。如果您想继续使用Search方法,则需要确保输入字符串在多单词术语周围有引号。你也需要告诉乌鸦不要逃避这些字符串。所以这样做是可行的:

代码语言:javascript
复制
var searchTerms = "\"Hugo Boss\"";
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms,
                                 escapeQueryOptions:EscapeQueryOptions.RawQuery);

但是,在所有情况下,要使输入正确地排列起来可能有点棘手。因此,您可能需要考虑的另一种技术是使用In运算符。如果您肯定会有逗号分隔搜索词,这将非常好,正如您所描述的。

代码语言:javascript
复制
var searchTerms = "Adidas, Nike, Hugo Boss";
var items = searchTerms.Split(',').Select(x => x.Trim());
var results = session.Query<Shop>().Where(x => x.Brands.In(items));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17553398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档