如何在Solr方面搜索中正确编码术语
当我使用下面的Solr查询执行搜索时,我得到了我想要的:“课程”被标记为“PHP”或“Programming”如何在Solr方面搜索中正确编码术语,solr,filter,space,facet,Solr,Filter,Space,Facet,当我使用下面的Solr查询执行搜索时,我得到了我想要的:“课程”被标记为“PHP”或“Programming” 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”的课程。整
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\WMU Term筛选器查询
&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或Programming'结果
我很想学习如何在facet查询中包含'C#NET',因为我快要发疯了:)谢谢 要找出哪个转义方案最有效,请尝试在每个术语前面加上字段名。例如,以第三行为例,尝试以下方法:
&fq=(facet_wmterm:PHP OR facet_wmterm:Programming OR facet_wmterm:'C#+.NET') // quotes and replaced space for + sign
原因是每个术语必须指定它需要位于哪个字段中,否则将在默认字段(
text
)中搜索它。对于转义问题,文字必须用双引号编码,其他需要按字面显示的特殊符号必须用URL编码。重复字段名确实有效果
&fq=facet_wmterm:Test1 OR PHP
…正在给我所有结果(=错误)并重复字段名,如下所示
&fq=facet_wmterm:Test1 OR facet_wmterm:PHP
…只给我上Test1或PHP课程(=正确!)。谢谢你,安萨里
但这仍然不能帮助我正确地查询.NETC#课程,因为我还错误地转义了特殊字符。在Solr中,您可以使用引号逐字搜索引号之间的内容,但您必须使用双引号,而不是我使用的单引号
这对我很有用:
&fq=(facet_wmterm:Test1 OR "C# .NET")
schema.xml中的数据类型是什么样的。答案将根据您是否使用StandardTokenizerFactory、LowerCaseFilterFactory等而有所不同。是的,我只指出了一个问题-我将转义问题留给您来解决。这只是一个示例规则。一般来说,双引号用于逐字搜索和URL编码特殊字符。您可以使用“管理”部分来明确哪些内容需要以何种方式编码。