0
votes

I am using nest to create my Elasticsearch Index. I have two questions:

Question 1. How can I add the settings to use english analyzer with a fall back for Standard Analyzer?

This is how I am creating my Index:

Uri _node = new Uri("elasticUri");
ConnectionSettings _connectionSettings = new ConnectionSettings(_node)
            .DefaultIndex("MyIndexName")
            .DefaultMappingFor<POCO>(m => m
            .IndexName("MyIndexName")
        );
IElasticClient _elasticClient = new ElasticClient(_connectionSettings);

var createIndexResponse = _elasticClient.CreateIndex("MyIndexName", c => c
   .Mappings(m => m
      .Map<POCO>(d => d.AutoMap())
   )
);

Looking at the examples Here, I am also not sure what should I pass for "english_keywords", "english_stemmer", etc

Question 2: If I use English Analyzer, will Elasticsearch automatically realize that the terms: "Barbecue" and "BBQ" are synonyms? Or do I need to explicitly pass a list of Synonyms to ES?

1

1 Answers

0
votes

Take a look at the NEST documentation for configuring a built-in analyzer for an index.

The documentation for the english analyzer simply demonstrates how you could reimplement the english analyzer yourself, as a custom analyzer, with the built-in analysis components, if you need to customize any part of the analysis. If you don't need to do this, simply use english as the name for the analyzer for a field

client.CreateIndex("my_index", c => c
    .Mappings(m => m
        .Map<POCO>(mm => mm
            .AutoMap()
            .Properties(p => p
                .Text(t => t
                    .Name(n => n.MyProperty)
                    .Analyzer("english")
                )
            )
        )
    )
); 

Will use the built-in english analyzer for the MyProperty field on POCO.

The english analyzer will not perform automatic synonym expansion for you, you'll need to configure the synonyms that are relevant to your search problem. You have two choices with regards to synonyms

  1. Perform synonym expansion at index time on the index input. This will result in faster search at the expense of being a relatively fixed approach.
  2. Perform synonym expansion at query time on the query input. This will result in slower search, but affords the flexibility to more easily add new synonym mappings as and when you need to.

You can always take the approach of using both, that is, indexing the synonyms that you expect to be relevant to your search use case, and adding new synonyms at query time, as you discover them to be relevant to your use case.