SOLR中的索引加字符

SOLR中的索引加字符,solr,escaping,character,uri,Solr,Escaping,Character,Uri,我正在使用UAX29URLEmailTokenizerFactory标记器为SOLR中的一些URI编制索引。问题是我的一些URI包含加号,SOLR将其解释为空白并拆分URI。这个问题可以通过巧妙地转义“+”字符来解决吗?我在分析器中尝试了“+”,但得到了相同的结果。 以下是我对字段的精确配置: <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyz

我正在使用UAX29URLEmailTokenizerFactory标记器为SOLR中的一些URI编制索引。问题是我的一些URI包含加号,SOLR将其解释为空白并拆分URI。这个问题可以通过巧妙地转义“+”字符来解决吗?我在分析器中尝试了“+”,但得到了相同的结果。 以下是我对字段的精确配置:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

您可以在分析器之前使用CharacterFilter(例如PatternReplaceCharFilterFactory)。这有一些好消息。我能想到的一个解决方案是用其他字符替换+字符-然后当你提供这个链接时,记得把它替换回来


另一件需要研究的事情是,将其替换为URL编码值a加号(%2B),然后查看analyzer是否将其视为一个空格。

我最终提出的解决方案使用了上面建议的CharacterFilter。诀窍是用编码字符“%2B”替换它。这样做的效果是将URI保持为单个令牌,并将其以适当的状态返回给我的应用程序,即'+'。下面是我提出的字段类型定义:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\+" replacement="%2B"/>
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\+" replacement="%2B"/>
    <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

谢谢你的想法,用转义“%2B”替换“+”字符效果很好