public static void AddIndex(ProductLuceneViewModel viewModel)
        {
            var directory = FSDirectory.Open(new DirectoryInfo(_path));
            var analyzer  = new StandardAnalyzer(_version, GetStopWords());

            using (var writer = new IndexWriter(directory, analyzer, create: false, mfl: IndexWriter.MaxFieldLength.UNLIMITED))
            {
                writer.AddDocument(MapProductToDocument(viewModel));
                writer.Optimize();
                writer.Commit();
                writer.Dispose();
                directory.Dispose();
            }
        }
        public static void UpdateIndex(ProductLuceneViewModel viewModel)
        {
            var directory = FSDirectory.Open(new DirectoryInfo(_path));
            var analyzer  = new StandardAnalyzer(_version, GetStopWords());

            using (var indexWriter = new IndexWriter(directory, analyzer, create: false, mfl: IndexWriter.MaxFieldLength.UNLIMITED))
            {
                var newDoc = MapProductToDocument(viewModel);

                indexWriter.UpdateDocument(new Term("Id", viewModel.Id.ToString(CultureInfo.InvariantCulture)), newDoc);
                indexWriter.Commit();
                indexWriter.Dispose();
                directory.Dispose();
            }
        }
        static Document MapProductToDocument(ProductLuceneViewModel viewModel)
        {
            var productDocument = new Document();

            productDocument.Add(new Field("Id", viewModel.Id.ToString(CultureInfo.InvariantCulture), Field.Store.YES, Field.Index.NOT_ANALYZED));
            productDocument.Add(new Field("PrincipleImagePath", viewModel.ImagePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
            var nameField = new Field("Name", viewModel.Name, Field.Store.YES, Field.Index.ANALYZED,
                                      Field.TermVector.WITH_POSITIONS_OFFSETS)
            {
                Boost = 3
            };

            productDocument.Add(nameField);
            productDocument.Add(new Field("Description", viewModel.Description, Field.Store.NO, Field.Index.ANALYZED,
                                          Field.TermVector.WITH_POSITIONS_OFFSETS));
            return(productDocument);
        }