在 Sitecore 8 和 Solr 中对枚举对象进行范围搜索
本文关键字:对象 范围 搜索 枚举 Sitecore Solr | 更新日期: 2023-09-27 18:35:49
我需要在 Sitecore 8 中的个人资料卡上进行复杂的范围搜索。到目前为止,我取得了什么成就:
所有配置文件卡在 Solr 中都作为字符串列表进行索引,其中列表中的字符串是平面路径,如下所示
"个人资料卡名称/个人资料名称/值"
这是我想到的最佳选择。当然,我想将值存储为整数,但不知道如何使用像配置文件卡这样的结构来做到这一点。
因此,我可以在 Solr 中进行直接查询,返回我期望的内容,例如
q=profilecard_sm:["Card1/Influence/2" TO "Card1/Influence/5"]&rows=10
但我不确定如何通过 Sitecore 中的 LINQ 执行此操作。
更新:
尝试了以下代码:
var results = context.GetQueryable<SearchResultItemWithProfileCard>()
.Where(i => i["profilecard_sm"].CompareTo("Card1/Influence/5") <= 0)
&& i["profilecard_sm"].CompareTo("Card1/Influence/1") >= 0))
;
但它正在被序列化为
(profilecard_sm:[* TO "Card1/Influence/5"] AND profilecard_sm:["Card1/Influence/1" TO *])
这绝对不是我要找的
但它正在被序列化为
(profilecard_sm:[* TO "Card1/Influence/5"] AND profilecard_sm:["Card1/Influence/1" TO *])
我遇到了同样的问题(尽管与 Lucene 和 int
字段),您可以在此处阅读。
我认为您只需要使用Sitecore.ContentSearch.Linq.dll
Sitecore.ContentSearch.Linq.MethodExtensions.Between<T>(this T value, T from, T to, Inclusion inclusion)
的扩展方法。
像这样:
using Sitecore.ContentSearch.Linq;
var results = context.GetQueryable<SearchResultItem>()
.Where(i => i["profilecard_sm"].Between("Card1/Influence/1", "Card1/Influence/5", Inclusion.Both));
不过,字符串比较可能很棘手。请考虑以下排序:
Card1/Influence/1
Card1/Influence/10
Card1/Influence/11
Card1/Influence/2
Card1/Influence/3
您的结果最终可能会像上面一样排序,但我不是 100% 确定 Solr 如何处理这个问题。