Elasticsearch NEST Предложение анализатора (ов) не найдено - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь использовать функциональность Elasticsearch ' Suggester '.

Используя фразу, термин или завершение, я всегда получаю следующую ошибку:

unable to parse SuggestionBuilder with name [COMPLETION]: parser not found"
unable to parse SuggestionBuilder with name [TERM]: parser not found"
unable to parse SuggestionBuilder with name [PHRASE]: parser not found"

Я пробовал несколько версий 6.x NEST, и все они имеют одну и ту же проблему. Обновление до 7.0alpha1 действительно меняет ошибку, но, похоже, вызывает множество других проблем, и я скорее не использую альфа-библиотеку в работе.

В настоящее время я следую этому уроку и встраиваю его в свой существующий код: https://github.com/elastic/elasticsearch-net-example/tree/6.x-codecomplete-netcore#part-6-suggestions

В настоящее время используется NEST 6.1

Модель:

public class SearchResult {

      public SearchResult()
                {
                    TitleSuggest = new CompletionField {Input = new List<string>(Title.Split(' '))};
                }
                public CompletionField TitleSuggest { get; set; }
        //etc
        }

Индексный метод:

public async Task<IActionResult> CreateIndex()
        {
            await _searchClient.CreateIndexAsync(SearchIndexName, indexSelector =>
                indexSelector
                    .Mappings(mappingsDescriptor =>
                        mappingsDescriptor.Map<Models.SearchResult>(y => y.AutoMap().Properties(pr=>pr.Completion(c => c.Name(p => p.TitleSuggest)
                        ))))

Предложить метод:

public async Task<ISearchResponse<SearchResult>> Suggest(string keyword)
        {
return await _searchClient.SearchAsync<SearchResult>(
                s =>
                        s.Suggest(ss => ss
                            .Completion("title", cs => cs
                                .Field(f => f.TitleSuggest)
                                .Prefix(keyword)
                                .Fuzzy(f => f
                                    .Fuzziness(Fuzziness.Auto)
                                )
                                .Size(5))
}

Мне трудно расшифровать ошибку. Кажется, что в библиотеках NEST отсутствуют парсеры с предложениями? Любая помощь будет отличной, спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

В качестве ответа @RussCam ответил на мой вопрос здесь

У меня был ConnectionSetting (DefaultFieldNameInferrer), который прописывал мой подсказчик

private IElasticClient ElasticClient(IConfiguration _config, string defaultIndex)
{
  var settings = new ConnectionSettings(new Uri(_config.GetSection("Search:Url").Value))
    .BasicAuthentication(_config.GetSection("Search:User").Value, _config.GetSection("Search:Password").Value)
    .DefaultIndex(_config.GetSection(defaultIndex).Value);
  //settings.DefaultFieldNameInferrer(p => p.ToUpper(CultureInfo.CurrentCulture));

  //Enable ElasticSearch Debugging
  settings.PrettyJson().DisableDirectStreaming();

  return new ElasticClient(settings);
}
0 голосов
/ 07 мая 2019
var searchResponse = await _searchClient.SearchAsync<SearchResult>(s => s
                .Index(ConfigurationManager.AppSettings.Get("index"))
                .Type(ConfigurationManager.AppSettings.Get("indextype"))
                .Suggest(su => su
                    .Completion("suggest", cs => cs
                        .Size(20)
                        .Field(f => f.TitleSuggest)
                        .Fuzzy(f => f
                                .Fuzziness(Fuzziness.Auto))
                        .Size(5))));

Надеюсь, что это сработает, дайте мне знать, если у вас все еще есть какие-либо проблемы. Спасибо

...