Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Solr方面搜索中正确编码术语_Solr_Filter_Space_Facet - Fatal编程技术网

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

如何在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”的课程。整

当我使用下面的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”的课程。整个字符串'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编码特殊字符。您可以使用“管理”部分来明确哪些内容需要以何种方式编码。