【发布时间】:2015-09-03 19:20:37
【问题描述】:
我有一个 Solr 集合,它没有返回一些非 ASCII 字符的结果。我们使用的例子是字符串S11. • “≡ «Ñaïvétý» ‘¢¥£’ ¶!#%;即使我在索引字段中有一个对象,搜索整个字符串也不会返回任何结果。但是,搜索该字符串的子字符串会返回匹配项。导致 Solr 不返回匹配项的唯一字符是中间的三个字符:• “≡。该字段被索引为text_en,但我也尝试过edge_ngram(希望有一点Cargo Cult 魔法来解决这个问题)。这三个字符有什么特别之处吗?还是我需要调整 Solr 索引字段的方式?
我们正在通过 django-haystack 进行搜索,但问题也出现在 Solr 管理员中。
以下是两个字段类型定义:
<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.EdgeNGramFilterFactory"
minGramSize="2" maxGramSize="50" side="front" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
【问题讨论】:
-
你检查过空格是否真的是空格吗?有几个字符看起来像空格,但实际上不是。一个例子是“Non-breaking space”。这些在复制和粘贴时可能会出现乱码。
-
最后一个问题 :) 如何在您的架构中定义字段类型
text_en和edge_ngram?你会分享它们吗?然后我们可以尝试重现该问题。 -
@cheffe - 添加了字段定义。我也想知道空格字符,但据我所知,它们只是普通的空格字符。当我在管理面板中查看查询时,Solr 可以将查询拆分为这些空间上的“单词”,就像其他空间一样。
标签: solr