Настройте стандартные стоп-слова для ElasticSearch, используя NEST - PullRequest
0 голосов
/ 11 марта 2019

У меня проблемы с настройкой стоп-слов в ElasticSearch с использованием клиента NEST.Вот как выглядит мое определение индекса:

            var createIndexResponse = _client.CreateIndex(IndexName, c => c
            .Settings(s => s
                .Analysis(a => a
                    .Analyzers(aa => aa.Stop("pfstop", st => st.StopWords("_english_"))
                    )
                )
            )
            .Mappings(m => m
                .Map<SearchTopic>(mm => mm
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.Posts)
                            .Name(n => n.FirstPost)
                            .Name(n => n.Title)
                            .SearchAnalyzer("pfstop")
                        )
                    )
                )
            )
        );

А вот мой запрос (и да, я только хочу вернуть идентификатор):

            var searchResponse = _client.Search<SearchTopic>(s => s
            .Source(sf => sf.Includes(i => i.Fields(f => f.Id)))
            .Query(q => q.MultiMatch(m => m.Query(searchTerm)
                .Fields(f => f
                    .Field(x => x.Title, boost: 20)
                    .Field(x => x.FirstPost, boost: 2)
                    .Field(x => x.Posts))))
            .Take(pageSize)
            .Skip(startRow));

Если мой searchTermэто «Саймон и Диана», я получаю результаты из любой строки, в которой есть «и», которая должна быть отфильтрована с помощью стоп-слов.

1 Ответ

0 голосов
/ 11 марта 2019

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

                .Mappings(m => m
                .Map<SearchTopic>(mm => mm
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.Posts)
                            .Analyzer("pfstop")
                        )
                        .Text(t => t
                            .Name(n => n.FirstPost)
                            .Analyzer("pfstop")
                        )
                        .Text(t => t
                            .Name(n => n.Title)
                            .Analyzer("pfstop")
                        )
                    )
                )
            )
...