代码之家  ›  专栏  ›  技术社区  ›  ZivHus

Solr WhitespaceTokenizerFactory将使URL参数无效

  •  0
  • ZivHus  · 技术社区  · 6 年前

    我创建了一个新的字段类型,如下所示:

    <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来创建特殊字符以进行索引和搜索,它现在正在工作,

    但我还有其他问题, 当我使用WhitespaceTokenizerFactory时,它会使URL参数无效,

    e、 g。 http://localhost:8983/solr/Test1/select?defType=dismax&hl.fl=content&hl=on&indent=on&q=%22C# “&qf=内容^100&行=1&wt=json

    当我在Solr Web UI中使用该参数时,

    它会起作用并得到结果,

    但是当我使用URL和相同的参数时,我没有得到任何结果

    这是我的约会:

    [
        {
         "id" : "test1",
         "title" : "test1# title C*?#",
         "content" : "test1# title C*?#",
         "dynamic_s": 5
        },
        {
         "id" : "test2",
         "title" : "test2 title C#",
         "content" : "test2 title C#",
         "dynamic_s": 10
        },
        {
         "id" : "test3",
         "title" : "test3 title",
         "content" : "test3 title",
         "dynamic_s": 0
        }
    ]
    

    如果我使用WhitespaceTokenizerFactory,如何使参数在URL中工作?

    1 回复  |  直到 6 年前
        1
  •  1
  •   MatsLindh    6 年前

    这与Solr无关,但与HTTP的工作方式有关。

    正如你在原来的帖子中所解释的,这是因为 # 在HTTP URL中具有特殊含义。A. # 指示一个本地锚点,并且永远不会传输到服务器-它用于保持对页面中单个点的本地引用(现在的值落后于 # 指的是 id 页面在显示时应滚动到的元素,但之前它引用了空 a 标记名称)。

    在URL中使用具有特殊含义的字符( & 也意味着会有一个新参数出现,而不是被解释为参数的值),您必须对其进行转义。在Javascript中,您可以使用 encodeURIComponent 为此,请执行以下操作:

    encodeURIComponent("foo#&bar")
    -> "foo%23%26bar"
    

    所以要发送值 foo#&bar 作为参数,并且不引入新参数或本地锚点哈希,该值将作为 foo%23%26bar 相反您的HTTP服务器将自动为您解码。

    ?q=field%3Afoo%23%26bar
    

    。。将被解释为 field:foo#&bar 服务器端。由于“:”通常可以在URL中安全地使用,因此您不必逃避它,但正确地使用它并没有坏处。如果要在应用程序中执行此操作,请使用所选语言查找URL转义。