我正在尝试模糊搜索标题文本,但是solr不会为我拼写错误的商标名称“ hilfinger ”查询提供任何结果:
http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfinger~
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"title:hilfinger~",
"fq":"white_label_id:6",
"_":"1554887612686"}},
"response":{"numFound":0,"start":0,"docs":[]
}}
使用标准搜索,我会得到正确命名 hilfiger 的结果:
http://rex:8983/solr/project/select?fq=white_label_id%3A6&q=title%3Ahilfiger
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"title:hilfiger",
"fq":"white_label_id:6",
"_":"1554887612686"}},
"response":{"numFound":27,"start":0,"docs":[
{
在solr的配置中是否需要激活某些内容以启用模糊搜索,还是得到0个结果的原因是什么?
答案 0 :(得分:1)
是的!您可以。您只需要正确配置schema.xml
中要启用模糊搜索或部分匹配的字段即可。您可以在索引时间将过滤器添加到所需字段,以告诉Solr除存储原始值外,还存储每个值的ngrams
。稍后,可以在该字段上执行模糊搜索。默认情况下,存在两种类型的此类过滤器,您只需将它们附加到索引分析器过滤器链即可。
在两种情况下,您都必须定义要在索引时间内生成的ngram的最小和最大大小。 (请注意,这也会增加索引的大小。)让我们使用过滤器在schema.xml中定义标题字段。
<fieldType name="title" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldType>
此处配置将ngram的最小大小定义为2个字母,最大定义为15个。 您可以通过替换行来更改过滤器,以从字段值的任何位置启用部分匹配,
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
使用
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15"/>