SolrNet:我如何在SolrNet中执行模糊搜索?

时间:2011-12-07 22:26:32

标签: solrnet fuzzy-search

我正在搜索solr中的“文本”字段,我正在寻找一种方法来匹配(例如)“anamal”和“animal”。我的“文本”字段的架构如下所示:

                                  

            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />

            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
    </fieldType>     

使用SolrNet如何进行模糊搜索以将“anamal”与“animal”匹配?

2 个答案:

答案 0 :(得分:5)

看来你可以使用Lucene“〜”模糊搜索,但有一招!如果保持不变,SolrNet默认会为你丢弃波形符,但可以关闭它......所以这应该可以帮到你:

var query = new SolrQueryByField("myField", "some value~");

query.Quoted = false;

警告似乎是(至少现在)你必须使用字段查询,SolrQuery上不存在相同的参数......但这是有道理的我猜。

答案 1 :(得分:0)

您可以使用索引时间同义词执行此操作,有关如何进行此设置的详细信息,请参阅Solr Wiki - SynonymFilterFactory