简体   繁体   中英

Elasticsearch nest can't find filter

So I'm trying to configure my index to have certain mappings and filters, but whenever I try to create the index I get the following error:

"[amgindex] failed to create index]; nested: IllegalArgumentException[Custom Analyzer [amgsearch] failed to find filter under name [synonym]"

this is the code I'm using to create the index

public void newIndex() {

  var amgBasic = new CustomAnalyzer {
    Tokenizer = "edgeNGram",
    Filter = new string[] { "lowercase", "worddelimiter", "stemmerEng", "stemmerNl", "stopper", "snowball" } // 
  };

  var amgBasicText = new CustomAnalyzer {
    Tokenizer = "standard",
    Filter = new string[] { "lowercase", "worddelimiter" }
  };

  var amgSearch = new CustomAnalyzer {
    Tokenizer = "whitespace",
    Filter = new string[] { "lowercase", "synonym" }
  };

  var synonmyfilter = new SynonymTokenFilter() {
    Format = "Solr",
    SynonymsPath = "analysis/synonym.txt"
  };


  try {

    var result = client.CreateIndex("amgindex", i => i
                    .Analysis(descriptor => descriptor
                        .Analyzers(bases => bases
                            //.Add("amgBasic", amgBasic)
                            //.Add("amgBasicText", amgBasicText)
                            .Add("amgsearch", amgSearch)
                         )
                    .TokenFilters(c => c.Add("stemmereng", new StemmerTokenFilter() { Language = "english" }))
                    .TokenFilters(c => c.Add("stemmernl", new StemmerTokenFilter() { Language = "english" }))
                    .TokenFilters(c => c.Add("stopper", new StopTokenFilter() { Stopwords = new List<string>() { "_english_", "_dutch_" } }))
                    .TokenFilters(c => c.Add("snowball", new SnowballTokenFilter() { Language = "english" }))
                    .TokenFilters(c => c.Add("worddelimiter ", new WordDelimiterTokenFilter() { }))
                    .TokenFilters(c => c.Add("synonym ", synonmyfilter))

                    )
                    .AddMapping<general_document>(m => m
                        .Properties(o => o
                            .String(p => p.Name(x => x.object_name).IndexAnalyzer("amgSearch"))
                            .String(p => p.Name(x => x.title).IndexAnalyzer("amgSearch"))
                            .String(p => p.Name(x => x.Text).IndexAnalyzer("amgSearch"))
                        )
                    )
                );
    Log.Info("Index created? " + result.Acknowledged);
  } catch (Exception ex) {
    Log.Error("[index-creation] " + ex.Message);
    throw;
  }
}

everytime I use one of my own filters the error pops up. Any clue why this is happening?

After spending way to much time on this I found it!! :)

there was a space in the name of 2 Filters, and those were causing the issue;

                                       ▼
.TokenFilters(c => c.Add("worddelimiter ", new WordDelimiterTokenFilter() { }))

                                 ▼
.TokenFilters(c => c.Add("synonym ", synonmyfilter))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM