public void Query_Replace()
        {
            using (BlogEntities db = new BlogEntities())
            {
                string queryResult = "";

                FtsSearch.Log = value => queryResult = value;

                List <Article> result = FtsSearch.Execute(() => _GetQuery(db).ToList());

                Assert.Equal(@"SELECT TOP (10) 
    [Project1].[Id] AS [Id], 
    [Project1].[Date] AS [Date], 
    [Project1].[Text] AS [Text], 
    [Project1].[Active] AS [Active]
    FROM ( SELECT 
        [Extent1].[Id] AS [Id], 
        [Extent1].[Date] AS [Date], 
        [Extent1].[Text] AS [Text], 
        [Extent1].[Active] AS [Active], 
        [Extent2].[Rank] AS [Rank]
        FROM  [dbo].[Article] AS [Extent1]
        INNER JOIN CONTAINSTABLE([dbo].[Article],(*),'text') AS [Extent2] ON [Extent1].[Id] = [Extent2].[Key]
        WHERE ([Extent1].[Active] = 1) AND (1=1)
    )  AS [Project1]
    ORDER BY [Project1].[Rank] DESC", queryResult);
            }
        }
        public void Query_Execute()
        {
            using (BlogEntities db = new BlogEntities())
            {
                List <Article> result = FtsSearch.Execute(() => _GetQuery(db).ToList());

                Assert.Single(result);
            }
        }
        public void Query_ExecuteAsync()
        {
            using (BlogEntities db = new BlogEntities())
            {
                Task.Run(async() =>
                {
                    List <Article> result = await FtsSearch.ExecuteAsync(async() => await _GetQuery(db).ToListAsync());

                    Assert.Single(result);
                }).Wait();
            }
        }
Exemple #4
0
        public void Query_FREETEXT()
        {
            using (BlogEntities db = new BlogEntities())
            {
                string res = FtsSearch.Query(
                    dbContext: db,
                    ftsEnum: FtsEnum.FREETEXT,
                    tableQuery: typeof(News),
                    tableFts: typeof(FTS_Int),
                    search: "test or text");

                Assert.Equal("(-FTSFULLTEXTTABLE-FREETEXT-;[dbo].[News];*;[dbo].[FTS_Int];test or text)", res);
            }
        }
Exemple #5
0
        public void Query()
        {
            using (BlogEntities db = new BlogEntities())
            {
                string res = FtsSearch.Query(
                    dbContext: db,
                    ftsEnum: FtsEnum.CONTAINS,
                    tableQuery: typeof(Article),
                    tableFts: typeof(FTS_Int),
                    search: "text");

                Assert.Equal("(-FTSFULLTEXTTABLE-CONTAINS-;[dbo].[Article];*;[dbo].[FTS_Int];text)", res);
            }
        }
Exemple #6
0
        public void Query_Fields()
        {
            using (BlogEntities db = new BlogEntities())
            {
                string res = FtsSearch.Query(
                    dbContext: db,
                    ftsEnum: FtsEnum.CONTAINS,
                    tableQuery: typeof(News),
                    tableFts: typeof(FTS_Int),
                    search: "text",
                    fields: new string[] { nameof(News.Text), nameof(News.Tegs) });

                Assert.Equal("(-FTSFULLTEXTTABLE-CONTAINS-;[dbo].[News];Text,Tegs;[dbo].[FTS_Int];text)", res);
            }
        }
        private IQueryable <Article> _GetQuery(BlogEntities db)
        {
            string queryText = FtsSearch.Query(
                dbContext: db,
                ftsEnum: FtsEnum.CONTAINS,
                tableQuery: typeof(Article),
                tableFts: typeof(FTS_Int),
                search: "text");

            var queryFts = db.FTS_Int.Where(n => n.Query.Contains(queryText));

            return(db.Article
                   .Where(n => n.Active)
                   .Join(queryFts, article => article.Id, fts => fts.Key, (article, fts) => new
            {
                article,
                fts.Rank,
            })
                   .OrderByDescending(n => n.Rank)
                   .Take(10)
                   .Select(n => n.article));
        }
        static void Main(string[] args)
        {
            using (BlogEntities db = new BlogEntities())
            {
                FtsSearch.Log = value => Console.WriteLine(value);

                {
                    string queryText = FtsSearch.Query(
                        dbContext: db,
                        ftsEnum: FtsEnum.CONTAINS,
                        tableQuery: typeof(Article),
                        tableFts: typeof(FTS_Int),
                        search: "text");

                    var queryFts = db.FTS_Int.Where(n => n.Query.Contains(queryText));

                    var query = db.Article
                                .Where(n => n.Active)
                                .Join(queryFts, article => article.Id, fts => fts.Key, (article, fts) => new
                    {
                        article,
                        fts.Rank,
                    })
                                .OrderByDescending(n => n.Rank)
                                .Take(10)
                                .Select(n => n.article);

                    Console.WriteLine(query.ToString());

                    var result = FtsSearch.Execute(() => query.ToList());
                }

                {
                    string queryNewsText = FtsSearch.Query(
                        dbContext: db,
                        ftsEnum: FtsEnum.CONTAINS,
                        tableQuery: typeof(News),
                        tableFts: typeof(FTS_Int),
                        search: "Новое AND исследование");

                    var queryNewsSearch = db.FTS_Int.Where(n => n.Query.Contains(queryNewsText));
                    var query           = db.News
                                          .Join(queryNewsSearch, news => news.Id, fts => fts.Key, (news, fts) => new
                    {
                        news.Id,
                        news.Text,
                        RubricId = news.Rubric.Id,
                        fts.Key,
                        fts.Rank,
                    })
                                          .OrderByDescending(n => n.Rank)
                                          .Take(5);

                    Console.WriteLine(query.ToString());

                    var result = FtsSearch.Execute(() => query.ToList());

                    //var result = await FtsSearch.ExecuteAsync(async () => await query.ToListAsync());

                    foreach (var item in result)
                    {
                        var elem = item;
                        Console.WriteLine(elem.Id + " " + (elem.Text.Length > 20 ? elem.Text.Substring(0, 20) : elem.Text).Replace('\r', ' ').Replace('\n', ' '));
                    }

                    Console.ReadKey();
                }
            }
        }