Lucene 7.5.0 как установить расширенные условия в нижнем регистре в true - PullRequest
0 голосов
/ 09 ноября 2018

Я реализовал свои собственные Analyzer, QueryParser и PerFieldAnalyzerWrapper для реализации функции ElasticSearch $ {field} .raw. Кажется, все работает нормально, за исключением случаев, когда я тестирую с использованием подстановочных знаков и т. Д. На типах StringField.

Я понимаю, что это потому, что эти запросы вообще не используют анализатор.

В предыдущих версиях lucene, была опция конфигурации для включения нижнего регистра этих запросов .

Я не могу найти, как это сделать в последней версии 7.5.0. Кто-нибудь может пролить свет на это?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Вы можете настроить анализатор, как этот, для более подробной информации, вы можете проверить эту ссылку Ссылка на Git для плагина CJK Bigram

    @BeforeClass
public static void setUp() throws Exception {
    analyzer = new Analyzer() {
        @Override
        protected TokenStreamComponents createComponents(String fieldName) {
            Tokenizer source = new IcuTokenizer(AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY,
                    new DefaultIcuTokenizerConfig(false, true));
            TokenStream result = new CJKBigramFilter(source);
            return new TokenStreamComponents(source, new StopFilter(result, CharArraySet.EMPTY_SET));
        }
    };
    analyzer2 = new Analyzer() {
        @Override
        protected TokenStreamComponents createComponents(String fieldName) {
            Tokenizer source = new IcuTokenizer(AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY,
                    new DefaultIcuTokenizerConfig(false, true));
            TokenStream result = new IcuNormalizerFilter(source,
                    Normalizer2.getInstance(null, "nfkc_cf", Normalizer2.Mode.COMPOSE));
            result = new CJKBigramFilter(result);
            return new TokenStreamComponents(source, new StopFilter(result, CharArraySet.EMPTY_SET));
        }
    };
0 голосов
/ 10 ноября 2018

Расширенные условия обрабатываются Analyzer.normalize.Поскольку вы реализовали свой собственный анализатор, добавьте реализацию метода normalize, который запускает tokenStream через LowerCaseFilter.

. Это может быть просто:

public class MyAnalyzer extends Analyzer {
    protected TokenStreamComponents createComponents(String fieldName) {
        //Your createComponents implementation
    }

    protected TokenStream normalize(String fieldName, TokenStream in) {
        return new LowerCaseFilter(in);
    }
}
...