Search Solr WhitespaceTokenizerFactory将使URL参数无效
我创建了一个新的字段类型,如下所示:Search Solr WhitespaceTokenizerFactory将使URL参数无效,search,solr,special-characters,highlight,Search,Solr,Special Characters,Highlight,我创建了一个新的字段类型,如下所示: <fieldType name="text_whitespace" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory" rule="unicode" /> <filter class="solr.Lo
<fieldType name="text_whitespace" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" rule="unicode" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" rule="unicode" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
如果我使用WhitespaceTokenizerFactory,我如何使参数在URL中工作?这与Solr无关,但与HTTP的工作方式有关 正如您在原始帖子中所解释的,这是因为
#
在HTTP URL中具有特殊意义。#
表示本地锚点,并且从不传输到服务器-它用于保留对页面中单个点的本地引用(现在,#
后面的值指的是页面显示时应该滚动到的元素的id
,但之前它引用了一个带有名称的空标记)
要在URL中使用具有特殊含义的字符(&
也意味着出现了一个新参数,而不是将其解释为参数的值),必须对其进行转义。在Javascript中,可以使用encodeURIComponent
执行此操作:
encodeURIComponent("foo#&bar")
-> "foo%23%26bar"
因此,要将值foo#&bar
作为参数发送,并且不引入新参数或本地锚散列,该值将作为foo%23%26bar
发送。HTTP服务器将自动为您解码
?q=field%3Afoo%23%26bar
…将被解释为服务器端的field:foo#&bar
serverside。由于“:”通常可以在URL中安全使用,因此您不必对其进行转义,但正确地进行转义并没有坏处。如果要在应用程序中执行此操作,请使用您选择的语言查找URL转义
?q=field%3Afoo%23%26bar