如果您的输入是单个字符串,"Nike, Adidas"
那么您首先需要删除逗号,因为它不是将在数据库中的标记“Nike”的一部分。
但是,您可以简单地正常搜索。您描述的行为是默认行为。提升不是必需的,因为多个匹配已经有更高的分数并被提升到顶部。
var searchTerms = "Nike, Adidas";
searchTerms = searchTerms.Replace(",", "");
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms);
但是,我注意到您有一些包含多个单词的术语(“Hugo Boss”)。这将放弃搜索,因为它需要单个单词标记。换句话说,这不会返回任何结果:
var searchTerms = "Hugo Boss";
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms);
对于如何处理这个问题,您有一些选择。如果您想继续使用该Search
方法,您需要确保输入字符串在多词术语周围有引号。您还需要告诉 raven 不要逃避这些字符串。所以这会起作用:
var searchTerms = "\"Hugo Boss\"";
var results = session.Query<Shop>().Search(x => x.Brands, searchTerms,
escapeQueryOptions:EscapeQueryOptions.RawQuery);
但是在所有情况下让输入正确排列可能有点棘手。因此,您可能要考虑的另一种技术是使用In
运算符。如果您确定如您所描述的那样使用逗号分隔搜索词,这将非常有效。
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));