听起来您可能为索引和查询配置了不同的 Solr 标记化。
因此,在您的示例中,索引中可能会出现以下术语:
- 乙
- 提单
- 布拉
- 废话
- 布拉布
- 布拉布尔
- BLÅBÆRS
但是,由于您的查询词没有被处理成 ngram,您只是在搜索
它不会出现在您的索引词中。
这是使用 ngram 时的常见做法,但听起来在您的用例中您希望在结果中返回部分匹配项。
检查您的 Solr 模式以确保您为查询时间配置了匹配的 EdgeNGram 过滤器,就像为索引时间配置的一样,例如
<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
</fieldType>
不过请确保您正在排序score
,因为这种策略很可能会给您带来很多误报!