我有一个使用Drupal,apache solr和tomcat作为apache solr主机的站点。我编辑了tomcat schema.xml以启用utf-8支持。这样就可以搜索utf-8字符。
然而,实际的结果集意外地工作。使用utf-8字符搜索内容时,apache solr也会返回带有“等效”字符的内容。
实施例 搜索滞后(法律)将返回含有låg(低)的内容。瑞典语有很多不同的东西。这可以配置。在那种情况下,在哪里?
答案 0 :(得分:1)
您的架构中似乎已经设置了ASCIIFoldingFilterFactory。
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.ASCIIFoldingFilterFactory
答案 1 :(得分:1)
这可以通过solr配置。当Solr索引记录(请参阅type =“index”)时,它使用您在模式中定义的分析器和过滤器。此外,当您发出搜索(请参阅type =“query”)时,将再次通过queryAnalyzer和过滤器分析搜索。这是模式中定义的内容。我建议使用Solr直接Web界面,并分析您的查询以及索引过程。
例如:
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="false" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
<filter catenateAll="0" catenateNumbers="1" catenateWords="1" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" enablePositionIncrements="true" ignoreCase="true" words="stopwords.txt"/>
<filter catenateAll="0" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
例如,我们可以添加solr.ISOLatin1AccentFilterFactory来替换ISO Latin 8字符集(ISO-8859-1)中的重音字符,这些字符集的非重音等效
我建议再次查看你的架构。
答案 2 :(得分:0)
好的,谢谢你们两个!
取消注释
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
在type =“index”中取消注释上面的行och type =“query”就可以了。
注意下面的<!--
<analyzer type="query">
<!--
<filter class="solr.ASCIIFoldingFilterFactory"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
-->
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
protected="protwords.txt"
generateWordParts="1"
generateNumberParts="1"
catenateWords="0"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>