如何在Solr facet搜索中正确编码术语

时间:2012-05-27 18:43:33

标签: solr filter space facet

当我使用以下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' bit给了我最初的,正确的PHP或编程'结果

我喜欢学习如何包含C#.NET'在我的方面查询,因为我即将疯狂:)谢谢!

2 个答案:

答案 0 :(得分:1)

要确定哪种转义方案效果最好,请尝试使用字段名称为每个字词添加前缀。例如,走第三行,试试这个:

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

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

答案 1 :(得分: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")