【问题标题】:Full-Text Search with Entity Framework Core使用 Entity Framework Core 进行全文搜索
【发布时间】:2017-08-16 20:09:37
【问题描述】:

在 EFCore 中使用全文搜索的最佳方式是什么

目前我有两种方法

方法#1

 var entities = this.DbContext.Example
            .FromSql("fullText_Proc {0}, {1}", searchTermParameter, topParameter);

        return entities.AsNoTracking().ToList();

这里我不得不创建一个 proc,因为 FromSql 忽略了 WHERE 子句。

方法#1

创建命令并手动进行映射

using (var command = this.DbContext.Database.GetDbConnection().CreateCommand())
    {
        command.CommandText = "SELECT ... WHERE CONTAINS("Name", @p1)";
        command.CommandType = CommandType.Text;
        var parameter = new SqlParameter("@p1",...);

        this.DbContext.Database.OpenConnection();

        using (var result = command.ExecuteReader())
        {
            while (result.Read())
            {
               .... // Map entity
            }
        }
    }

【问题讨论】:

  • 我使用了您的第二种方法来使用 CONTAINSTABLE 获取排名结果,目前使用 FromSql 无法实现。谢谢。

标签: c# .net-core entity-framework-core


【解决方案1】:

WHERE 子句实际上与 FromSql 一起使用。 我花了足够的时间意识到问题是传递参数。

这就是我解决问题的方法。

  public IList<Example> QueryPhrase(string phrase)
    {
        phrase = $"FORMSOF(FREETEXT, \"{phrase}\")";

        var query = _dataContext.Example
            .FromSql(@"SELECT [Id]
                      ,[Sentence]                          
                    FROM [dbo].[Example]
                    WHERE CONTAINS(Sentence, @p0)", phrase)
            .AsNoTracking();

        return query.ToList();
    }

【讨论】:

  • 如何使用 Entity Framework Core 在实体“示例”的“句子”列上定义全文索引?我正在尝试做类似的事情,但我需要定义全文索引以便代码工作。
  • 我也想和@VMh做同样的事情,也想知道!
  • 你不能用 EF Core 来做。首先应该在Sql server上创建,然后可以使用Contains查询。
猜你喜欢
  • 2019-03-11
  • 2023-02-03
  • 1970-01-01
  • 2020-09-10
  • 2018-07-25
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
相关资源
最近更新 更多