1

当我使用以下 Solr 查询执行搜索时,我得到了我想要的:已用术语“PHP”或“编程”标记的“课程”。

q=[* TO *]&facet=on&facet.field=facet_contenttype&fq=facet_contenttype:mediaitems_course&facet.field=facet_wmterm&fq=(facet_wmterm:PHP OR Programming)

现在,我还想包含带有“C# .NET”标签的课程。整个字符串“C# .NET”是我正在使用的 CMS 中的一个标签。我已经为 facet_wmterm 过滤器查询尝试了以下可能性。

&fq=(facet_wmterm:PHP OR Programming OR C# .NET) // no quotes
&fq=(facet_wmterm:PHP OR Programming OR 'C# .NET') // quotes
&fq=(facet_wmterm:PHP OR Programming OR 'C#+.NET') // quotes and replaced space for + sign
&fq=(facet_wmterm:PHP OR Programming OR C#%2b.NET) // no quotes, encoded + sign
&fq=(facet_wmterm:PHP OR Programming OR 'C#%2b.NET') // quotes, encoded + sign
&fq=(facet_wmterm:PHP OR Programming OR 'C%23+.NET') // quotes, encoded # sign
&fq=(facet_wmterm:PHP OR Programming OR C%23+.NET) // no quotes, encoded # sign
&fq=(facet_wmterm:PHP OR Programming OR 'C%23%2B.NET') // quotes, encoded # and + signs
&fq=(facet_wmterm:PHP OR Programming OR C%23%2B.NET) // no quotes, encoded # and + signs
and a lot more options....

奇怪的是,以上所有选项都会返回所有课程,无论它们被标记为什么,而且我很确定我不是在看缓存,因为删除“C# .NET”位会给我最初的、正确的“PHP 或编程”结果.

我很想学习如何在我的方面查询中包含“C# .NET”,因为我快要发疯了 :) 谢谢!

4

2 回答 2

2

要确定哪种转义方案效果最好,请尝试在每个术语前加上字段名称。因此,例如,采取你的第三行,试试这个:

&fq=(facet_wmterm:PHP OR facet_wmterm:Programming OR facet_wmterm:'C#+.NET') // quotes and replaced space for + sign

原因是每个术语必须指定它需要在哪个字段中,否则会在默认字段 ( text) 中搜索。对于转义问题,文字必须用双引号编码,而其他需要按字面显示的特殊符号必须是 URL 编码的。

于 2012-05-27T19:00:05.373 回答
0

重复字段名称确实有效果。

&fq=facet_wmterm:Test1 OR PHP 

..给我所有结果(=错误)并像这样重复字段名称

&fq=facet_wmterm:Test1 OR facet_wmterm:PHP

..给我的课程只有Test1或PHP(=正确!)。谢谢你的安萨里。

不过,这仍然没有帮助我正确查询 .NET C# 课程,因为我也错误地转义了特殊字符。在 Solr 中,您可以使用引号从字面上搜索引号之间的内容,但您必须使用双引号而不是我使用的单引号。http://wiki.apache.org/solr/SolrQuerySyntax

这对我有用:

&fq=(facet_wmterm:Test1 OR "C# .NET")
于 2012-05-27T19:43:24.680 回答