【发布时间】:2015-10-02 08:14:05
【问题描述】:
我最近从使用 Lucene for Sitecore 换成了 Solr。
在大多数情况下它一直很顺利,但我编写一些查询(使用 Sitecore.ContentSearch.Linq)抽象的方式现在似乎不兼容。
具体来说,我有“全球”内容和“区域”内容的情况,如下所示:
- 首页 (000)
- X
- 是
- Z
- 地区 (ID: 111)
- 区域 1 (ID: 221)
- 一个
- B
- 区域 2 (ID: 222)
- D
- 区域 1 (ID: 221)
我的代码可以在 Lucene 上运行,但现在不能在 Solr 上运行。它应该找到所有“全球”和单个区域的内容,不包括所有其他区域的内容。例如,如果用户的当前区域是区域 1,我希望查询返回内容 X、Y、Z、A、B。
Sitecore 的 Item Crawler 为索引中的每个项目都有一个名为“_path”的字段,它是一个多值字符串字段的 ID,例如,区域 1 的 _path 字段值将是 [000, 111, 221]。
当我使用 Linq 抽象编写此代码时,结果如下所示,不返回结果。
-_path:(111) OR _path:(221)
但是 _path:(111) 确实返回结果。 大吃一惊。
当我使用 Solr 接口并将 OR 的每一侧包装在额外的括号中时,如下所示(我认为这是多余的),它可以工作! 脑洞大开的 v2。
(-_path:(111)) OR (_path:(221))
首先,这些查询之间有什么区别?
其次,我真正的问题是我无法添加这些额外的括号,因为我在抽象 Linq 中工作,因此括号将被“优化”出来。
任何建议都会很棒!干杯。
【问题讨论】:
-
你能贴出你用来生成查询的代码吗?
标签: linq solr lucene sitecore sitecore8