Beispiel #1
0
    public static void search(String indexDir, String q)
    {
        Directory dir = FSDriecotry.Open(new System.IO.FileInfo(indexDir));
           IndexSearcher searcher = new IndexSearcher(dir, true);
           QueryParser parser = new QueryParser("contents", new StandardAnalyzer(Version.LUCENE_CURRENT));

           Query query = parser.Parser(q);
           Lucene.Net.Saerch.TopDocs hits = searher.Search(query, 10);
           System.Console.WriteLine("Found " + hits.totalHits + " document(s) that matched query '" + q + "':");
           for (int i = 0; i < hits.scoreDocs.Length; i++) {
           ScoreDoc scoreDoc = hits.ScoreDoc[i];
           Document doc = searcher.Doc(scoreDoc.doc);
           System.Console.WriteLine(doc.Get("filename"));
           }
          searcher.Close();
    }
Beispiel #2
0
        public List <Article.Blog.Data.Models.Article> Search(string field, string keyword)
        {
            _QueryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, field, _Analyzer);
            _Query       = _QueryParser.Parse(keyword);

            using (_IndexSearcher = new IndexSearcher(_Directory, true))
            {
                var article = new List <Article.Blog.Data.Models.Article>();
                var result  = _IndexSearcher.Search(_Query, 10);

                foreach (var loopDoc in result.ScoreDocs.OrderBy(s => s.Score))
                {
                    _Document = _IndexSearcher.Doc(loopDoc.Doc);

                    article.Add(new Article.Blog.Data.Models.Article()
                    {
                        Id = System.Convert.ToInt32(_Document.Get("Id")), Description = _Document.Get("Description")
                    });
                }

                return(article);
            }
        }
Beispiel #3
0
        public Commentary GetForVerse(string commentatorCode, int chapterNumber, int verseNumber)
        {
            if (commentatorCode == null)
            {
                throw new ArgumentNullException(nameof(commentatorCode));
            }

            IEnumerable <int> docIds =
                GetCommentaryIds(
                    chapterNumber: chapterNumber,
                    verseNumber: verseNumber,
                    commentatorCode: commentatorCode)
                .Distinct();

            IndexSearcher indexSearcher = IndexSearcherProvider.GetIndexSearcher();

            return(docIds
                   .Select(x => indexSearcher.Doc(x).GetObject <Commentary>())
                   .OrderBy(x => x.CommentatorCode)
                   .ThenBy(x => x.ChapterNumber)
                   .ThenBy(x => x.FirstVerseNumber)
                   .SingleOrDefault());
        }
Beispiel #4
0
        private static List <string> searchOneWord_Lucene(string query, IndexSearcher searcher)
        {   //Ищем по одному слову
            List <string> result_lucene = new List <string>();
            var           array         = query.Split(' ');

            var phrase = new MultiPhraseQuery();

            foreach (var word in array)
            {
                phrase = new MultiPhraseQuery();
                if (!String.IsNullOrEmpty(word))
                {
                    phrase.Add(new Term("name_word", word));
                    var res = searcher.Search(phrase, 10).ScoreDocs;
                    foreach (var hit in res)
                    {
                        var foundDoc = searcher.Doc(hit.Doc);
                        result_lucene.Add(getFoundDocResult(foundDoc));
                    }
                }
            }
            return(result_lucene);
        }
Beispiel #5
0
        //Find Repetition using numeric range query
        private void BasicFindRepByNumericRange(Directory directory)
        {
            var indexReader = DirectoryReader.Open(directory);

            var indexSearcher = new IndexSearcher(indexReader);

            Query query = NumericRangeQuery.NewInt32Range("Repetition", 1, 2, true, false);

            TopDocs topDocs = indexSearcher.Search(query, 10);

            Console.WriteLine("Total Hits: " + topDocs.TotalHits);

            Console.WriteLine("Results: ");

            foreach (var scoreDoc in topDocs.ScoreDocs)
            {
                Document d = indexSearcher.Doc(scoreDoc.Doc);

                Console.WriteLine("Book Id: " + d.Get("BookId"));
            }

            indexReader.Dispose();
        }
Beispiel #6
0
        public static IEnumerable <Artifact> getAllIndexRecords()
        {
            if (!System.IO.Directory.EnumerateFiles(_luceneDir).Any())
            {
                return(new List <Artifact>());
            }

            //search lucene searcher
            var searcher = new IndexSearcher(_directory, false);
            var reader   = IndexReader.Open(_directory, false);
            var docs     = new List <Document>();
            var term     = reader.TermDocs();

            while (term.Next())
            {
                docs.Add(searcher.Doc(term.Doc));
            }

            reader.Dispose();
            searcher.Dispose();

            return(_mapLuceneToDataList(docs));
        }
Beispiel #7
0
        public IEnumerable <TEntity> GetAllIndexRecords()
        {
            // validate search index
            if (!System.IO.Directory.EnumerateFiles(_luceneDir).Any())
            {
                return(new List <TEntity>());
            }

            // set up lucene searcher
            var searcher = new IndexSearcher(_directory, false);
            var reader   = IndexReader.Open(_directory, false);
            var docs     = new List <Document>();
            var term     = reader.TermDocs();

            // v 3.0.3: use 'hit.Doc'
            while (term.Next())
            {
                docs.Add(searcher.Doc(term.Doc));
            }
            reader.Dispose();
            searcher.Dispose();
            return(_mapLuceneToDataList(docs));
        }
 public IEnumerable <LuceneSynonymData> GetAllIndexRecords()
 {
     // validate search index
     if (!System.IO.Directory.EnumerateFiles(_luceneDir).Any())
     {
         yield break;
     }
     // set up lucene searcher
     using (var searcher = new IndexSearcher(_directory, false))
     {
         using (var reader = IndexReader.Open(_directory, false))
         {
             var docs = new List <Document>();
             var term = reader.TermDocs();
             // v 2.9.4: use 'hit.Doc()'
             // v 3.0.3: use 'hit.Doc'
             while (term.Next())
             {
                 yield return(MapToSynonymData(searcher.Doc(term.Doc)));
             }
         }
     }
 }
Beispiel #9
0
        /// <summary>
        /// 获取商品信息数据
        /// </summary>
        /// <param name="query"></param>
        /// <param name="fieldModelList"></param>
        /// <param name="listCount"></param>
        /// <returns></returns>
        public List <T> QueryIndex(Query query, IEnumerable <FieldDataModel> fieldModelList, int listCount)
        {
            List <T>      modelList = null;
            IndexSearcher searcher  = null;

            try
            {
                modelList = new List <T>();
                Directory dir = FSDirectory.Open(StaticConstant.IndexPath);
                searcher = new IndexSearcher(dir);
                TopDocs docs = searcher.Search(query, listCount);
                foreach (ScoreDoc sd in docs.ScoreDocs)
                {
                    Document doc = searcher.Doc(sd.Doc);
                    modelList.Add(DocumentToTInfo(doc, fieldModelList));
                }
            }
            finally
            {
                searcher?.Dispose();
            }
            return(modelList);
        }
Beispiel #10
0
        public Pagination Paginate(int pageIndex, int pageSize)
        {
            Sort sort = null;

            if (_sortFields != null && _sortFields.Count > 0)
            {
                sort = new Sort(_sortFields.ToArray());
            }

            TopDocs docs;

            if (sort == null)
            {
                docs = _searcher.Search(_nativeQuery, null, Int32.MaxValue);
            }
            else
            {
                docs = _searcher.Search(_nativeQuery, null, Int32.MaxValue, sort);
            }

            var items = new List <object>();
            var start = pageIndex * pageSize;
            var bound = start + pageSize;

            if (bound > docs.TotalHits)
            {
                bound = docs.TotalHits;
            }

            for (var i = start; i < bound; i++)
            {
                var doc = docs.ScoreDocs[i];
                items.Add(ModelConverter.ToModel(_searcher.Doc(doc.Doc), ModelType));
            }

            return(new Pagination(items, pageIndex, pageSize, docs.TotalHits));
        }
        public IDictionary <string, ISet <int> > GetDocumentsWithMatches(string term)
        {
            var result      = new Dictionary <string, ISet <int> >();
            var indexWriter = GetIndexWriter();
            var reader      = indexWriter.GetReader(true);

            TermQuery     query    = new TermQuery(new Term(IndexFieldNames.Text, term));
            BooleanQuery  theQuery = new BooleanQuery(); theQuery.Add(query, Occur.SHOULD);
            IndexSearcher searcher = new IndexSearcher(reader);

            var searchResults = searcher.Search(query, 10);

            var matches = new HashSet <int>();

            foreach (var docId in searchResults.ScoreDocs)
            {
                Lucene.Net.Documents.Document doc = searcher.Doc(docId.Doc);
                //result.AddOccurence(docId.Doc, doc.Get(IndexFieldNames.File), reader.GetTermVector(docId.Doc, IndexFieldNames.Text));
                var documentName = doc.Get(IndexFieldNames.File);
                if (result.ContainsKey(documentName))
                {
                    result[documentName].Add(docId.Doc);
                }
                else
                {
                    result.Add(documentName, new HashSet <int>()
                    {
                        docId.Doc
                    });
                }
            }

            reader.Dispose();
            indexWriter.Dispose();

            return(result);
        }
Beispiel #12
0
        private List <SearchResult> GetResults(string searchText)
        {
            Microsoft.WindowsAzure.Storage.CloudStorageAccount storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=diningsearchstorage;AccountKey=xeYMzXThFxrU7SsAMGbSWLdy9psLFRMk5NI8x0bx24xtEg9MPIstf/xwPdjvDm6HpHZaCPxxVFCv/7DDd5wymA==");
            AzureDirectory azureDirectory = new AzureDirectory(storageAccount, "diningsearchindex");
            IndexReader    indexReader    = IndexReader.Open(azureDirectory, true);
            Searcher       indexSearch    = new IndexSearcher(indexReader);
            Analyzer       analyzer       = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);

            var queryParser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Dish", analyzer);
            var query       = queryParser.Parse(searchText);

            Console.WriteLine("Searching for: " + query.ToString());
            TopDocs resultDocs = indexSearch.Search(query, 100);

            Console.WriteLine("Results Found: " + resultDocs.TotalHits);

            List <SearchResult> searchResults = new List <SearchResult>();
            var hits = resultDocs.ScoreDocs;

            foreach (var hit in hits)
            {
                Document documentFromSearcher = indexSearch.Doc(hit.Doc);

                SearchResult result = new SearchResult
                {
                    CafeName    = documentFromSearcher.Get("Cafe/Restaurant"),
                    CafeUrl     = documentFromSearcher.Get("URL"),
                    DishName    = documentFromSearcher.Get("Dish"),
                    Price       = documentFromSearcher.Get("Price"),
                    Description = documentFromSearcher.Get("Description")
                };

                searchResults.Add(result);
            }

            return(searchResults);
        }
Beispiel #13
0
        public DataTable Query(string keyword)
        {
            if (!((_Directory as dynamic).Directory as System.IO.DirectoryInfo).Exists)
            {
                return(null);
            }
            if (_Directory.ListAll().Length == 0)
            {
                return(null);
            }


            _IndexReader = IndexReader.Open(_Directory, true);

            _QueryParser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, _IndexReader.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), _Analyzer);
            _Query       = _QueryParser.Parse(keyword);

            var docList = new List <Document>();

            using (_IndexSearcher = new IndexSearcher(_Directory, true))
            {
                var searchResult = _IndexSearcher.Search(_Query, 10);


                foreach (var loopDoc in searchResult.ScoreDocs.OrderBy(s => s.Score))
                {
                    var doc = _IndexSearcher.Doc(loopDoc.Doc);
                    docList.Add(doc);
                }
            }


            var result = DocumentToTable(docList);


            return(result);
        }
Beispiel #14
0
        private static IList <SearchResult> RetrieveSearchResults(IndexSearcher indexSearcher, TopDocs hits)
        {
            //iterate over the results.
            var results = hits.ScoreDocs.AsQueryable()
                          .OrderByDescending(hit => hit.Score)
                          .ToList()
                          .Select(hit =>
            {
                var jsonDocumentField = indexSearcher.Doc(hit.Doc).GetField(Constants.JsonDocumentFieldName);

                var fieldDoc = (hit as FieldDoc);
                if (fieldDoc != null && Double.IsNaN(hit.Score) && fieldDoc.fields.Length > 0 && fieldDoc.fields[0] is float)
                {
                    hit.Score = (float)fieldDoc.fields[0];            //TODO: is this really true?
                }
                if (jsonDocumentField == null)
                {
                    return new SearchResult
                    {
                        Score       = hit.Score,
                        LuceneDocId = hit.Doc,
                        Document    = null
                    }
                }
                ;

                return(new SearchResult
                {
                    Score = hit.Score,
                    LuceneDocId = hit.Doc,
                    Document = JsonConvert.DeserializeObject <JsonDocumentDto>(jsonDocumentField.StringValue)
                });
            })
                          .ToList();

            return(results);
        }
Beispiel #15
0
        public IList <SearchDocument> Search(IList <Filter> searchFilters, IList <SearchSortField> sortFields)
        {
            if (searchFilters == null || searchFilters.Count == 0)
            {
                return(new List <SearchDocument>());
            }

            var sort = CreateSort(searchFilters, sortFields);

            var reader   = IndexReader.Open(_directory, true);
            var searcher = new IndexSearcher(reader);
            var query    = CreateQuery(searchFilters);
            var hits     = searcher.Search(query, new QueryWrapperFilter(query), 100, sort);

            var searchResult = new List <SearchDocument>();

            foreach (var facet in hits.ScoreDocs)
            {
                var doc       = searcher.Doc(facet.Doc);
                var searchDoc = new SearchDocument
                {
                    Fields = new List <SearchDocumentField>()
                };

                var docFields = doc.GetFields();
                foreach (var field in docFields)
                {
                    var value = doc.Get(field.Name);
                    searchDoc.Fields.Add(new SearchDocumentField {
                        FieldName = field.Name, Value = value
                    });
                }

                searchResult.Add(searchDoc);
            }
            return(searchResult);
        }
Beispiel #16
0
        public static IList <T> Search <T>(string fieldName, string searchText, int pageSize) where T : class, new()
        {
            IList <T> result = new List <T>();
            var       props  = typeof(T).GetProperties();

            using (IndexReader reader = IndexReader.Open(directory, true))
                using (IndexSearcher searcher = new IndexSearcher(reader))
                {
                    using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30))
                    {
                        QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, fieldName, analyzer);

                        // support `*xxx`
                        parser.AllowLeadingWildcard = true;

                        Query      query     = parser.Parse(searchText);
                        ScoreDoc[] scoreDocs = searcher.Search(query, pageSize).ScoreDocs;

                        foreach (var score in scoreDocs)
                        {
                            Document doc = searcher.Doc(score.Doc);
                            T        t   = new T();

                            foreach (var prop in props)
                            {
                                var value = Convert.ChangeType(doc.Get(prop.Name), prop.PropertyType);
                                prop.SetValue(t, value);
                            }

                            result.Add(t);
                        }
                    }
                }

            directory.Dispose();
            return(result);
        }
Beispiel #17
0
        public static List <Post> getPitanjaPretrage(string recenica)
        {
            if (recenica != "")
            {
                Directory   directoryPronadjenaPitanja = Data.Lucene.Indexing.GetDirectoryPitanja();
                Analyzer    analyzer    = new StandardAnalyzer(Version.LUCENE_30);
                IndexReader indexReader = IndexReader.Open(directoryPronadjenaPitanja, true);
                Searcher    searcher    = new IndexSearcher(indexReader);

                //var queryParser = new QueryParser(Version.LUCENE_30, "Naslov", analyzer);
                var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "Naslov", "Sadrzaj", "Tagovi" }, analyzer);
                var query       = queryParser.Parse(recenica.Trim()); // Rastavljanje rečenice na rijeci

                TopDocs     pronadjeno = searcher.Search(query, indexReader.MaxDoc);
                List <Post> pitanja    = new List <Post>();


                var hits = pronadjeno.ScoreDocs;
                foreach (var hit in hits)
                {
                    var documentFromSearcher = searcher.Doc(hit.Doc);
                    using (TriglavBL temp = new TriglavBL())
                    {
                        pitanja.Add(temp.getPitanjeByID(Convert.ToInt32(documentFromSearcher.Get("id"))));
                    }
                }


                searcher.Dispose();
                directoryPronadjenaPitanja.Dispose();
                return(pitanja);
            }
            else
            {
                return(null);
            }
        }
Beispiel #18
0
        public static List <Product> Search(string criterion, string term)
        {
            List <Product> products = new List <Product>();

            try
            {
                Directory directory = FSDirectory.Open(new DirectoryInfo(indexPath));
                Analyzer  analyzer  = new StandardAnalyzer(Util.Version.LUCENE_30);

                IndexReader indexReader = IndexReader.Open(directory, true);
                Searcher    searcher    = new IndexSearcher(indexReader);

                var queryParser = new QueryParser(Util.Version.LUCENE_30, criterion, analyzer);
                var query       = queryParser.Parse(term);

                TopDocs resultDocs = searcher.Search(query, indexReader.MaxDoc);

                var topDocs = resultDocs.ScoreDocs;

                foreach (var hit in topDocs)
                {
                    var documentFromSearch = searcher.Doc(hit.Doc);
                    products.Add(new Product
                    {
                        ProductID = Convert.ToInt32(documentFromSearch.Get("ProductID")),
                        Name      = documentFromSearch.Get("Name"),
                        Detail    = documentFromSearch.Get("Detail"),
                        Price     = Convert.ToDecimal(documentFromSearch.Get("Price"))
                    });
                }
                return(products);
            }
            catch (Exception ex)
            {
                return(products);
            }
        }
        public List <Product> SearchAllField(string keyword)
        {
            var type       = typeof(Product);
            var properties = (from u in type.GetProperties()
                              select u.Name).ToArray();



            _QueryParser = new MultiFieldQueryParser(
                Lucene.Net.Util.Version.LUCENE_30,
                properties,
                new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));



            _Query = _QueryParser.Parse(keyword);

            using (_IndexSearcher = new IndexSearcher(_Directory, true))
            {
                List <Product> products = new List <Product>();
                var            result   = _IndexSearcher.Search(_Query, 10);

                foreach (var loopDoc in result.ScoreDocs.OrderBy(s => s.Score))
                {
                    _Document = _IndexSearcher.Doc(loopDoc.Doc);

                    products.Add(new Product()
                    {
                        Id          = System.Convert.ToInt32(_Document.Get("Id")),
                        Name        = _Document.Get("Name"),
                        Description = _Document.Get("Description")
                    });
                }

                return(products);
            }
        }
Beispiel #20
0
        public void TestGiga()
        {
            Directory         index = NewDirectory();
            RandomIndexWriter w     = new RandomIndexWriter(Random(), index, Similarity, TimeZone);

            addDoc("Lucene in Action", w);
            addDoc("Lucene for Dummies", w);

            //addDoc("Giga", w);
            addDoc("Giga byte", w);

            addDoc("ManagingGigabytesManagingGigabyte", w);
            addDoc("ManagingGigabytesManagingGigabytes", w);

            addDoc("The Art of Computer Science", w);
            addDoc("J. K. Rowling", w);
            addDoc("JK Rowling", w);
            addDoc("Joanne K Roling", w);
            addDoc("Bruce Willis", w);
            addDoc("Willis bruce", w);
            addDoc("Brute willis", w);
            addDoc("B. willis", w);
            IndexReader r = w.Reader;

            w.Dispose();

            Query q = new SlowFuzzyQuery(new Term("field", "giga"), 0.9f);

            // 3. search
            IndexSearcher searcher = NewSearcher(r);

            ScoreDoc[] hits = searcher.Search(q, 10).ScoreDocs;
            assertEquals(1, hits.Length);
            assertEquals("Giga byte", searcher.Doc(hits[0].Doc).Get("field"));
            r.Dispose();
            index.Dispose();
        }
Beispiel #21
0
        private void button4_Click(object sender, EventArgs e)
        {
            string        indexPath = "lucenedir";
            string        kw        = "奥运会";//对用户输入的搜索条件进行拆分。
            FSDirectory   directory = FSDirectory.Open(new DirectoryInfo(indexPath), new NoLockFactory());
            IndexReader   reader    = IndexReader.Open(directory, true);
            IndexSearcher searcher  = new IndexSearcher(reader);
            //搜索条件
            PhraseQuery query = new PhraseQuery();

            //foreach (string word in kw.Split(' '))//先用空格,让用户去分词,空格分隔的就是词“计算机   专业”
            //{
            //    query.Add(new Term("body", word));
            //}
            //query.Add(new Term("body","语言"));--可以添加查询条件,两者是add关系.顺序没有关系.
            // query.Add(new Term("body", "大学生"));
            query.Add(new Term("body", kw)); //body中含有kw的文章
            query.Slop = 100;                //多个查询条件的词之间的最大距离.在文章中相隔太远 也就无意义.(例如 “大学生”这个查询条件和"简历"这个查询条件之间如果间隔的词太多也就没有意义了。)
            //TopScoreDocCollector是盛放查询结果的容器
            TopScoreDocCollector collector = TopScoreDocCollector.Create(1000, true);

            searcher.Search(query, null, collector);                               //根据query查询条件进行查询,查询结果放入collector容器
            ScoreDoc[] docs = collector.TopDocs(0, collector.TotalHits).ScoreDocs; //得到所有查询结果中的文档,GetTotalHits():表示总条数   TopDocs(300, 20);//表示得到300(从300开始),到320(结束)的文档内容.
            //可以用来实现分页功能
            this.listBox1.Items.Clear();
            for (int i = 0; i < docs.Length; i++)
            {
                //
                //搜索ScoreDoc[]只能获得文档的id,这样不会把查询结果的Document一次性加载到内存中。降低了内存压力,需要获得文档的详细内容的时候通过searcher.Doc来根据文档id来获得文档的详细内容对象Document.
                int      docId = docs[i].Doc;                      //得到查询结果文档的id(Lucene内部分配的id)
                Document doc   = searcher.Doc(docId);              //找到文档id对应的文档详细信息
                this.listBox1.Items.Add(doc.Get("number") + "\n"); // 取出放进字段的值
                this.listBox1.Items.Add(doc.Get("body") + "\n");
                Console.WriteLine(doc.Get("body"));
                this.listBox1.Items.Add("-----------------------\n");
            }
        }
Beispiel #22
0
        /// <summary>
        /// Gets all records in index. Performance will be impacted by
        /// </summary>
        /// <returns></returns>
        public static IEnumerable <LuceneData> GetAllIndexRecords()
        {
            // validating search index
            if (!System.IO.Directory.EnumerateFiles(LuceneDirectory).Any())
            {
                return(new List <LuceneData>());
            }
            // setting up Lucene searcher
            var searcher = new IndexSearcher(Directory, false);
            var reader   = IndexReader.Open(Directory, false);
            var docs     = new List <Document>();
            var term     = reader.TermDocs();

            // adding docs to list
            while (term.Next())
            {
                docs.Add(searcher.Doc(term.Doc));
            }
            // disposing of handlers
            reader.Dispose();
            searcher.Dispose();
            // mapping Lucene doc list to data list
            return(MapLuceneToDataList(docs));
        }
Beispiel #23
0
        public IEnumerable <int> Search(string keywords)
        {
            var dir = FSDirectory.Open(_config.IndexPath);

            using (var reader = DirectoryReader.Open(dir))
            {
                var searcher = new IndexSearcher(reader);

                var query = new RevisionDefinition.QueryBuilder()
                            .WithKeywords(keywords);

                var result = searcher.Search(query.Query, 25); //todo: paging

                var hits = result.ScoreDocs;

                var docs = hits
                           .Select(d => searcher.Doc(d.Doc))
                           .ToArray();

                return(docs
                       .Select(d => int.Parse(d.Get(query.IndexFieldId)))
                       .ToArray());
            }
        }
Beispiel #24
0
        /// <summary>
        /// 搜索日志
        /// </summary>
        /// <param name="project"></param>
        /// <param name="str"></param>
        /// <returns></returns>
        public static List <String> SearchData(String project, String str, DateTime dt)
        {
            if (String.IsNullOrWhiteSpace(str))
            {
                return(null);
            }
            String path = LoggerModel.Getpath(project, dt);

            if (!File.Exists(Path.Combine(path, "write.lock")))
            {
                return(null);
            }
            List <String> list = new List <String>();

            try
            {
                IndexSearcher searcher = GetSearcher(project, dt);
                bool          InOrder  = true;
                ScoreDoc[]    scoreDoc = SearchTime(searcher, str, "Content", 10, InOrder);
                foreach (var docs in scoreDoc)
                {
                    Document doc    = searcher.Doc(docs.Doc);
                    String   result = doc.Get("Content");
                    if (!String.IsNullOrWhiteSpace(result))
                    {
                        list.Add(result);
                    }
                }
                searcher.Dispose();
            }
            catch (Exception e)
            {
                LogHelper.Critical("日志查询报错" + e.Message);
            }
            return(list);
        }
Beispiel #25
0
        public static IEnumerable <PostModel> GetAllIndexRecords()
        {
            // validate search index
            if (!System.IO.Directory.EnumerateFiles(luceneDirectory).Any())
            {
                return(new List <PostModel>());
            }

            // set up lucene searcher
            var searcher = new IndexSearcher(directory, false);
            var reader   = IndexReader.Open(directory, false);
            var docs     = new List <Document>();
            var term     = reader.TermDocs();

            while (term.Next())
            {
                docs.Add(searcher.Doc(term.Doc));
            }

            reader.Dispose();
            searcher.Dispose();

            return(MapLuceneToDataList(docs));
        }
Beispiel #26
0
        public static List <Post> getPitanjaByTag(int TAGID)
        {
            Directory   directoryPronadjenaPitanjaTagovi = Data.Lucene.Indexing.GetDirectoryPitanjaTagovi();
            Analyzer    analyzer    = new StandardAnalyzer(Version.LUCENE_30);
            IndexReader indexReader = IndexReader.Open(directoryPronadjenaPitanjaTagovi, true);
            Searcher    searcher    = new IndexSearcher(indexReader);

            //var queryParser = new QueryParser(Version.LUCENE_30, "Naslov", analyzer);
            var queryParser = new MultiFieldQueryParser(Version.LUCENE_30, new[] { "PostID", "TagID", "DatumKreiranja" }, analyzer);
            var query       = queryParser.Parse(Convert.ToString(TAGID)); // Rastavljanje rečenice na rijeci

            TopDocs     pronadjeno    = searcher.Search(query, indexReader.MaxDoc);
            List <Post> PitanjaTagovi = new List <Post>();

            if (pronadjeno != null)
            {
                var hits = pronadjeno.ScoreDocs;
                foreach (var hit in hits)
                {
                    var documentFromSearcher = searcher.Doc(hit.Doc);
                    using (TriglavBL temp = new TriglavBL())
                    {
                        PitanjaTagovi.Add(temp.getPitanjeByID(Convert.ToInt32(documentFromSearcher.Get("PostID"))));
                    }
                }
                searcher.Dispose();
                directoryPronadjenaPitanjaTagovi.Dispose();
                return(PitanjaTagovi);
            }
            else
            {
                searcher.Dispose();
                directoryPronadjenaPitanjaTagovi.Dispose();
                return(PitanjaTagovi);
            }
        }
        private SearchResults CompileResults(IndexSearcher searcher, TopDocs topdDocs)
        {
            SearchResults searchResults = new SearchResults()
            {
                TotalHits = topdDocs.TotalHits
            };

            foreach (var result in topdDocs.ScoreDocs)
            {
                Document document     = searcher.Doc(result.Doc);
                Hit      searchResult = new Hit
                {
                    Rating  = document.GetField("rating")?.GetStringValue(),
                    MovieId = document.GetField("movieid")?.GetStringValue(),
                    Score   = result.Score,
                    Title   = document.GetField("title")?.GetStringValue(),
                    Snippet = document.GetField("snippet")?.GetStringValue()
                };

                searchResults.Hits.Add(searchResult);
            }

            return(searchResults);
        }
Beispiel #28
0
        // search methods
        public static IEnumerable <LuceneSearchModel> GetAllIndexRecords()
        {
            // validate search index
            if (!System.IO.Directory.EnumerateFiles(_luceneDir).Any())
            {
                return(new List <LuceneSearchModel>());
            }

            // set up lucene searcher
            var searcher = new IndexSearcher(_directory, false);
            var reader   = IndexReader.Open(_directory, false);

            searcher.SetDefaultFieldSortScoring(true, true);
            var docs = new List <Document>();
            var term = reader.TermDocs();

            while (term.Next())
            {
                docs.Add(searcher.Doc(term.Doc));
            }
            reader.Dispose();
            searcher.Dispose();
            return(_mapLuceneToDataList(docs));
        }
    static void Main(string[] args)
    {
        RAMDirectory dir    = new RAMDirectory();
        IndexWriter  writer = new IndexWriter(dir, new StandardAnalyzer());

        AddDocument(writer, "John Doe", "NY");
        AddDocument(writer, "John Foo", "New Jersey");
        AddDocument(writer, "XYZ", "NY");
        writer.Commit();
        BooleanQuery query = new BooleanQuery();

        query.Add(new TermQuery(new Term("Name", "john")), BooleanClause.Occur.SHOULD);
        query.Add(new TermQuery(new Term("Location", "NY")), BooleanClause.Occur.SHOULD);
        IndexReader   reader   = writer.GetReader();
        IndexSearcher searcher = new IndexSearcher(reader);
        var           hits     = searcher.Search(query, null, 10);

        for (int i = 0; i < hits.totalHits; i++)
        {
            Document doc     = searcher.Doc(hits.scoreDocs[i].doc);
            var      explain = searcher.Explain(query, hits.scoreDocs[i].doc);
            Console.WriteLine("{0} - {1} - {2}", hits.scoreDocs[i].score, doc.ToString(), explain.ToString());
        }
    }
Beispiel #30
0
        public static JToken AutoCompleteMakeResult(IndexSearcher searcher, TopDocs topDocs, int skip, int take, NuGetSearcherManager searcherManager, bool includeExplanation, Query query)
        {
            JArray array = new JArray();

            for (int i = skip; i < Math.Min(skip + take, topDocs.ScoreDocs.Length); i++)
            {
                ScoreDoc scoreDoc = topDocs.ScoreDocs[i];
                Document document = searcher.Doc(scoreDoc.Doc);
                string   id       = document.Get("Id");

                array.Add(id);
            }

            JObject result = new JObject();

            result.Add("@context", new JObject {
                { "@vocab", "http://schema.nuget.org/schema#" }
            });
            result.Add("totalHits", topDocs.TotalHits);
            result.Add("indexName", searcherManager.IndexName);
            result.Add("data", array);

            if (includeExplanation)
            {
                JArray explanations = new JArray();
                for (int i = skip; i < Math.Min(skip + take, topDocs.ScoreDocs.Length); i++)
                {
                    ScoreDoc    scoreDoc    = topDocs.ScoreDocs[i];
                    Explanation explanation = searcher.Explain(query, scoreDoc.Doc);
                    explanations.Add(explanation.ToString());
                }
                result.Add("explanations", explanations);
            }

            return(result);
        }
    public List <string> SearchAndDisplayResults(string querytext)
    {
        querytext = querytext.ToLower();
        Query   query   = parser.Parse(querytext);
        TopDocs results = searcher.Search(query, 100);

        int           rank       = 0;
        List <string> rankResult = new List <string>();

        foreach (ScoreDoc scoreDoc in results.ScoreDocs)
        {
            rank++;
            Lucene.Net.Documents.Document doc = searcher.Doc(scoreDoc.Doc);
            string myFieldValue = doc.Get(TEXT_FN).ToString();
            rankResult.Add("Rank " + rank + " title " + myFieldValue);

            //string titleValue = doc.Get(TITLE_FN).ToString();
            //string authorValue = doc.Get(AUTHOR_FN).ToString();
            //Console.WriteLine("Rank " + rank + " title " + titleValue + " author " + authorValue);
            //rankResult.Add("Rank " + rank + " title " + titleValue + " author " + authorValue);
        }

        return(rankResult);
    }
        private static void GenerateHighlights(IList<Document> documents, IndexWriter writer, SearchCriteria criteria)
        {
            var documentHightlightMap = documents.ToDictionary(c => c._id.ToString());

            var reader = DirectoryReader.Open(writer, true, true);
            var queryParser = new HighlighterQueryParser(writer.GetAnalyzer());
            queryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_REWRITE);

            var query = queryParser.Parse(criteria.Query)
                                   .Rewrite(reader);

            var highlighter = CreateHighlighter();
            var fieldQuery = highlighter.GetFieldQuery(query);

            var searcher = new IndexSearcher(reader);
            var topFieldDocs = searcher.Search(query, documents.Count, Sort.RELEVANCE);
            var scoreDocs = topFieldDocs.ScoreDocs;

            foreach (var sd in scoreDocs)
            {
                var bestFragments = highlighter.GetBestFragments(fieldQuery, reader, sd.Doc, Schema.StandardField.FULL_TEXT, FRAGMENT_SIZE, FRAGMENT_COUNT);
                var document = searcher.Doc(sd.Doc);
                var docId = document.Get(Schema.StandardField.ID);

                if (documentHightlightMap.ContainsKey(docId) && bestFragments.Length > 0)
                {
                    var dictionary = documentHightlightMap[docId].AsDictionary();
                    var highlight = String.Join($"{Environment.NewLine} ... {Environment.NewLine}", bestFragments);
                    dictionary[HIGHLIGHT_FIELD_NAME] = highlight;
                }
            }
        }
        private void SearchIndex()
        {
            String q = "t_text1:random";
            QueryParser parser = new QueryParser(TEST_VERSION, "t_text1", a);
            Query query = parser.Parse(q);
            IndexSearcher searcher = new IndexSearcher(dir, true);
            // This scorer can return negative idf -> null fragment
            IScorer scorer = new QueryTermScorer(query, searcher.IndexReader, "t_text1");
            // This scorer doesn't use idf (patch version)
            //Scorer scorer = new QueryTermScorer( query, "t_text1" );
            Highlighter h = new Highlighter(scorer);

            TopDocs hits = searcher.Search(query, null, 10);
            for (int i = 0; i < hits.TotalHits; i++)
            {
                Document doc = searcher.Doc(hits.ScoreDocs[i].Doc);
                String result = h.GetBestFragment(a, "t_text1", doc.Get("t_text1"));
                Console.WriteLine("result:" + result);
                Assert.AreEqual(result, "more <B>random</B> words for second field");
            }
            searcher.Close();
        }
        public void TestQueryScorerHits()
        {
            Analyzer analyzer = new SimpleAnalyzer();
            QueryParser qp = new QueryParser(TEST_VERSION, FIELD_NAME, analyzer);
            query = qp.Parse("\"very long\"");
            searcher = new IndexSearcher(ramDir, true);
            TopDocs hits = searcher.Search(query, 10);

            QueryScorer scorer = new QueryScorer(query, FIELD_NAME);
            Highlighter highlighter = new Highlighter(scorer);


            for (int i = 0; i < hits.ScoreDocs.Length; i++)
            {
                Document doc = searcher.Doc(hits.ScoreDocs[i].Doc);
                String storedField = doc.Get(FIELD_NAME);

                TokenStream stream = TokenSources.GetAnyTokenStream(searcher.IndexReader, hits.ScoreDocs[i].Doc,
                                                                    FIELD_NAME, doc, analyzer);

                IFragmenter fragmenter = new SimpleSpanFragmenter(scorer);

                highlighter.TextFragmenter = fragmenter;

                String fragment = highlighter.GetBestFragment(stream, storedField);

                Console.WriteLine(fragment);
            }
        }
        public void TestNumericRangeQuery()
        {
            // doesn't currently highlight, but make sure it doesn't cause exception either
            query = NumericRangeQuery.NewIntRange(NUMERIC_FIELD_NAME, 2, 6, true, true);
            searcher = new IndexSearcher(ramDir, true);
            hits = searcher.Search(query, 100);
            int maxNumFragmentsRequired = 2;

            QueryScorer scorer = new QueryScorer(query, FIELD_NAME);
            Highlighter highlighter = new Highlighter(this, scorer);

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(NUMERIC_FIELD_NAME);
                TokenStream tokenStream = analyzer.TokenStream(FIELD_NAME, new StringReader(text));

                highlighter.TextFragmenter = new SimpleFragmenter(40);

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             "...");
                //Console.WriteLine("\t" + result);
            }


        }
        public void DoStandardHighlights(Analyzer analyzer, IndexSearcher searcher,
                                         TopDocs hits, Query query, IFormatter formatter, bool expandMT)
        {
            IFragmenter frag = new SimpleFragmenter(20);

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(HighlighterTest.FIELD_NAME);
                int maxNumFragmentsRequired = 2;
                String fragmentSeparator = "...";
                IScorer scorer = null;
                TokenStream tokenStream = analyzer.TokenStream(HighlighterTest.FIELD_NAME, new StringReader(text));
                if (Mode == QUERY)
                {
                    scorer = new QueryScorer(query);
                }
                else if (Mode == QUERY_TERM)
                {
                    scorer = new QueryTermScorer(query);
                }
                var highlighter = new Highlighter(formatter, scorer) {TextFragmenter = frag};

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             fragmentSeparator);
                Console.WriteLine("\t" + result);
            }
        }
        public void TestUnRewrittenQuery()
        {
            var helper = new TestHighlightRunner();
            helper.TestAction = () =>
                                    {
                                        numHighlights = 0;
                                        // test to show how rewritten query can still be used
                                        searcher = new IndexSearcher(ramDir, true);
                                        Analyzer analyzer = new StandardAnalyzer(TEST_VERSION);

                                        QueryParser parser = new QueryParser(TEST_VERSION, FIELD_NAME, analyzer);
                                        Query query = parser.Parse("JF? or Kenned*");
                                        Console.WriteLine("Searching with primitive query");
                                        // forget to set this and...
                                        // query=query.Rewrite(reader);
                                        TopDocs hits = searcher.Search(query, null, 1000);

                                        // create an instance of the highlighter with the tags used to surround
                                        // highlighted text
                                        // QueryHighlightExtractor highlighter = new
                                        // QueryHighlightExtractor(this,
                                        // query, new StandardAnalyzer(TEST_VERSION));

                                        int maxNumFragmentsRequired = 3;

                                        for (int i = 0; i < hits.TotalHits; i++)
                                        {
                                            String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(FIELD_NAME);
                                            TokenStream tokenStream = analyzer.TokenStream(FIELD_NAME,
                                                                                           new StringReader(text));
                                            Highlighter highlighter = helper.GetHighlighter(query, FIELD_NAME,
                                                                                            tokenStream,
                                                                                            this, false);

                                            highlighter.TextFragmenter = new SimpleFragmenter(40);

                                            String highlightedText = highlighter.GetBestFragments(tokenStream, text,
                                                                                                  maxNumFragmentsRequired,
                                                                                                  "...");

                                            Console.WriteLine(highlightedText);
                                        }
                                        // We expect to have zero highlights if the query is multi-terms and is
                                        // not
                                        // rewritten!
                                        Assert.IsTrue(numHighlights == 0,
                                                      "Failed to find correct number of highlights " + numHighlights +
                                                      " found");
                                    };

            helper.Start();
        }
        public void TestConstantScoreMultiTermQuery()
        {

            numHighlights = 0;

            query = new WildcardQuery(new Term(FIELD_NAME, "ken*"));
            ((WildcardQuery) query).RewriteMethod = MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE;
            searcher = new IndexSearcher(ramDir, true);
            // can't rewrite ConstantScore if you want to highlight it -
            // it rewrites to ConstantScoreQuery which cannot be highlighted
            // query = unReWrittenQuery.Rewrite(reader);
            Console.WriteLine("Searching for: " + query.ToString(FIELD_NAME));
            hits = searcher.Search(query, null, 1000);

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(HighlighterTest.FIELD_NAME);
                int maxNumFragmentsRequired = 2;
                String fragmentSeparator = "...";
                QueryScorer scorer = null;
                TokenStream tokenStream = null;

                tokenStream = analyzer.TokenStream(FIELD_NAME, new StringReader(text));

                scorer = new QueryScorer(query, FIELD_NAME);

                Highlighter highlighter = new Highlighter(this, scorer);

                highlighter.TextFragmenter = new SimpleFragmenter(20);

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             fragmentSeparator);
                Console.WriteLine("\t" + result);
            }
            Assert.IsTrue(numHighlights == 5, "Failed to find correct number of highlights " + numHighlights + " found");

            // try null field

            hits = searcher.Search(query, null, 1000);

            numHighlights = 0;

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(HighlighterTest.FIELD_NAME);
                int maxNumFragmentsRequired = 2;
                String fragmentSeparator = "...";
                QueryScorer scorer = null;
                TokenStream tokenStream = null;

                tokenStream = analyzer.TokenStream(HighlighterTest.FIELD_NAME, new StringReader(text));

                scorer = new QueryScorer(query, null);

                Highlighter highlighter = new Highlighter(this, scorer);

                highlighter.TextFragmenter = new SimpleFragmenter(20);

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             fragmentSeparator);
                Console.WriteLine("\t" + result);
            }
            Assert.IsTrue(numHighlights == 5, "Failed to find correct number of highlights " + numHighlights + " found");

            // try default field

            hits = searcher.Search(query, null, 1000);

            numHighlights = 0;

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(HighlighterTest.FIELD_NAME);
                int maxNumFragmentsRequired = 2;
                String fragmentSeparator = "...";
                QueryScorer scorer = null;
                TokenStream tokenStream = null;

                tokenStream = analyzer.TokenStream(HighlighterTest.FIELD_NAME, new StringReader(text));

                scorer = new QueryScorer(query, "random_field", HighlighterTest.FIELD_NAME);

                Highlighter highlighter = new Highlighter(this, scorer);

                highlighter.TextFragmenter = new SimpleFragmenter(20);

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             fragmentSeparator);
                Console.WriteLine("\t" + result);
            }
            Assert.IsTrue(numHighlights == 5, "Failed to find correct number of highlights " + numHighlights + " found");
        }
Beispiel #39
0
 // Make sure the documents returned by the search match the expected list
 // Copied from TestSort.java
 private void AssertMatches(IndexSearcher searcher, Query query, Sort sort, string expectedResult)
 {
     ScoreDoc[] result = searcher.Search(query, null, 1000, sort).ScoreDocs;
     StringBuilder buff = new StringBuilder(10);
     int n = result.Length;
     for (int i = 0; i < n; ++i)
     {
         Document doc = searcher.Doc(result[i].Doc);
         IndexableField[] v = doc.GetFields("tracer");
         for (int j = 0; j < v.Length; ++j)
         {
             buff.Append(v[j].StringValue);
         }
     }
     Assert.AreEqual(expectedResult, buff.ToString());
 }
        public void TestRegexQuery()
        {
            const int maxNumFragmentsRequired = 2;

            query = new RegexQuery(new Term(FIELD_NAME, "ken.*"));
            searcher = new IndexSearcher(ramDir, true);
            hits = searcher.Search(query, 100);

            var scorer = new QueryScorer(query, FIELD_NAME);
            var highlighter = new Highlighter(this, scorer);

            for (int i = 0; i < hits.TotalHits; i++)
            {
                String text = searcher.Doc(hits.ScoreDocs[i].Doc).Get(FIELD_NAME);
                TokenStream tokenStream = analyzer.TokenStream(FIELD_NAME, new StringReader(text));

                highlighter.TextFragmenter = new SimpleFragmenter(40);

                String result = highlighter.GetBestFragments(tokenStream, text, maxNumFragmentsRequired,
                                                             "...");
                Console.WriteLine("\t" + result);
            }

            Assert.IsTrue(numHighlights == 5, "Failed to find correct number of highlights " + numHighlights + " found");
        }