SolrNet: Как я могу выполнить нечеткий поиск в SolrNet? - PullRequest
1 голос
/ 08 декабря 2011

Я ищу "текстовое" поле в 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, как я могу выполнить нечеткий поиск, чтобы сопоставить «аномальное» с «животным»?

Ответы [ 2 ]

5 голосов
/ 08 декабря 2011

Кажется, что вы можете использовать нечеткий поиск Lucene "~", но есть хитрость!Если оставить его без изменений, SolrNet по умолчанию будет скрывать для вас символ тильды, но его можно отключить ... так что это должно помочь вам:

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

query.Quoted = false;

Похоже, что это предостережениепо крайней мере) вы должны использовать запрос по полю, такого же параметра в SolrQuery не существует ... но я думаю, это имеет смысл.

0 голосов
/ 08 декабря 2011

Вы можете сделать это с помощью синонимов индекса времени, см. Solr Wiki - SynonymFilterFactory для получения подробной информации о том, как это настроить.

...