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