我在我的数据库或Solr索引中有以下2个产品:全面战争:幕府将军2 [下载] 和鸡蛋。
我希望搜索能够做到的是将这两个产品与错误匹配,例如:
"Egggs", "Eggz", "Eg", "Egs" and "Shogn Download", "Totle War","Tutal War: Shogunn 2 Download"
等。
编辑(有点工作):
这会让你开始,但在搜索中使用不同的角色仍有问题,即只有像“鸡蛋”和“超值维生素D全脂牛奶”可以拼错而不是“全面战争:幕府将军2”。
新代码:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
理想是能够让我的搜索像谷歌一样,它可以很好地纠正你的拼写,无论是小写,大写还是有几个错误。我如何使我的搜索类似于Google的搜索?
答案 0 :(得分:2)
模糊搜索不进行查询时间分析 因此,您查询的可能性与索引术语不匹配。
上述配置中的条款在索引编制期间会进行小写过滤,这会将所有条款存储在小写字母中 而且搜索Egggs永远不会产生任何结果,因为Egggs不会匹配鸡蛋。 搜索到的术语需要明确地降低。
此外,在上面的配置中,索引时间分析与查询时间分析有很大不同 通常建议在查询和索引期间使用类似的过滤器,以便索引的术语与搜索的术语匹配。
solr.PorterStemFilterFactory
可能会导致搜索字词的根目录完全不同,并且可能永远不会与索引字词匹配。
重新访问您的配置。也许检查示例solr schema xml以供参考。