Unified Search是否有类似Contains的功能?FIND查询字符串包含子串咨询
在Episerver FIND/Unified Search中实现字符串包含子串检测
1. 分词式匹配(类似业务逻辑里的Contains)
如果你的需求是匹配包含目标词汇的文档(比如搜"apple"能匹配到"apple pie"这类包含该词的内容),直接用FIND内置的Match方法就好——这是基于索引的全文检索,比手动判断Contains高效得多:
query = query.Filter(i => !i.MatchTypeHierarchy(typeof(InfoPage)) || (i.MatchTypeHierarchy(typeof(InfoPage)) && ((InfoPage)i).SearchSubsection().Match(SOMETHING)) );
2. 精确子串匹配(包含任意片段,不分词)
要是你需要严格匹配包含某个子串(比如找包含"meth"的"something"),就得用通配符查询:
- 使用
Wildcard方法,在目标字符串前后加*就行。注意:前导通配符(*xxx)会影响查询性能,非必要别用,优先用后缀通配符(xxx*)或者全文匹配。
query = query.Filter(i => !i.MatchTypeHierarchy(typeof(InfoPage)) || (i.MatchTypeHierarchy(typeof(InfoPage)) && ((InfoPage)i).SearchSubsection().Exists() && ((InfoPage)i).SearchSubsection().Wildcard($"*{SOMETHING}*")) );
你也可以用QueryString方法结合通配符,直接指定字段:
query = query.QueryString($"SearchSubsection:*{SOMETHING}*");
3. 关键注意点
- 确保你的
SearchSubsection字段在索引配置里被设为Searchable,否则这些匹配方法都不生效。 - 保留
Exists()检查是对的,可以避免字段为空时的无效匹配。
内容的提问来源于stack exchange,提问作者mohsinali1317
相关产品推荐
相关产品推荐

