进行模糊搜索以适应太阳黑子?

时间:2011-11-11 23:10:27

标签: ruby-on-rails ruby-on-rails-3 solr sunspot

我在我的数据库或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的搜索?

1 个答案:

答案 0 :(得分:2)

模糊搜索不进行查询时间分析 因此,您查询的可能性与索引术语不匹配。

上述配置中的条款在索引编制期间会进行小写过滤,这会将所有条款存储在小写字母中 而且搜索Egggs永远不会产生任何结果,因为Egggs不会匹配鸡蛋。 搜索到的术语需要明确地降低。

此外,在上面的配置中,索引时间分析与查询时间分析有很大不同 通常建议在查询和索引期间使用类似的过滤器,以便索引的术语与搜索的术语匹配。

solr.PorterStemFilterFactory可能会导致搜索字词的根目录完全不同,并且可能永远不会与索引字词匹配。

重新访问您的配置。也许检查示例solr schema xml以供参考。