public List <PraticienToIndexModel> Search(string q)
        {
            q = Uri.UnescapeDataString(q);

            var path = ConfigurationManager.AppSettings["LuceneDirectory"];

            //get path
            var chemin = HttpContext.Current.Server.MapPath("~");

            path = Path.Combine(chemin, path);
            var result = new List <PraticienToIndexModel>();

            var analyzer = new KeywordAnalyzer();

            var indexDirInfo = new DirectoryInfo(path);

            if (!System.IO.Directory.Exists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }

            Directory directory = FSDirectory.Open(indexDirInfo,
                                                   new SimpleFSLockFactory(indexDirInfo));

            Index(directory);
            var searcher = new IndexSearcher(directory);

            var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "All", analyzer)
            {
                AllowLeadingWildcard   = true,
                LowercaseExpandedTerms = false
            };
            var queryString = string.Format("{0} OR *{0}* OR *{0} OR {0}*", q);

            var query     = parser.Parse(queryString);
            var maxResult = 100;
            var hits      = searcher.Search(query, maxResult);

            var mapper = new ReflectionDocumentMapper <PraticienToIndexModel>(Lucene.Net.Util.Version.LUCENE_30);

            maxResult = (hits.TotalHits < maxResult) ? hits.TotalHits : maxResult;

            for (var i = 0; i < maxResult; i++)
            {
                var praticien = new PraticienToIndexModel();

                var doc = searcher.Doc(hits.ScoreDocs[i].Doc);

                mapper.ToObject(doc, null, praticien);
                if (!result.Any(r => r.Cin.Equals(praticien.Cin)))
                {
                    result.Add(praticien);
                }
            }

            searcher.Dispose();
            return(result);
        }