как сделать lucene нечувствительным к регистру - PullRequest
8 голосов
/ 01 апреля 2011

По умолчанию слова «Слово» и «слово» не совпадают.Как я могу сделать Lucene нечувствительным к регистру?

Ответы [ 4 ]

13 голосов
/ 01 апреля 2011

Самый простой подход - это нижний регистр всего контента с возможностью поиска, а также запросов.См. Документацию LowerCaseFilter.Вы также можете использовать Wildcard запросы для поиска без учета регистра, поскольку он обходит Analyzer.

. При желании вы можете хранить содержимое в разных полях, чтобы захватывать разные конфигурации регистра.

5 голосов
/ 01 апреля 2011

StandardAnalyzer применяет LowerCaseFilter, что делает "Слово" и "слово" одинаковыми.Вы могли бы просто передать это на использование IndexWriter и QueryParser.Например, несколько фрагментов строки:

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter writer = new IndexWriter(dir, analyzer, true, mlf);
QueryParser parser = new QueryParser(Version.LUCENE_30, field, analyzer);
1 голос
/ 29 сентября 2018

В дополнение к использованию StandardAnalyzer, который включает LowerCaseFilter и фильтры для общих английских слов (таких как "the"), вы также должны убедиться, что вы строите свой документ, используя TextField s, а не StringField, который для точного поиска.

1 голос
/ 16 февраля 2012

Добавьте LowerCaseFilterFactory в ваш fieldType для этого поля в Schema.xml.Пример,

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
            <analyzer type="index">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>

            <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
        </fieldType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...