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