【发布时间】:2022-01-30 18:10:18
【问题描述】:
我有一个不同数量的关键字/短语列表,我使用如下来创建 WHERE CONTAINS 查询。我试图排除包含关键字/短语之一的所有文章。
if (itemQuery?.Keywords != null)
{
foreach (var keyword in itemQuery.Keywords)
{
var upperKeyword = keyword.Text.ToUpper();
queryable = queryable.Where(x =>
!x.TitleUpper.Contains(upperKeyword));
}
}
但是,itemQuery?.Keywords 列表现在有 45 个关键字(可能更多),并且大大降低了 EF Core 查询的速度。返回数据需要 5 到 10 秒。如果我删除这部分查询,它会返回到 ms 以返回。
有关如何提高此查询的速度/效率的任何提示或想法。
更新 29/01
我将 TitleUpper 字段更新为全文,希望这会提高速度。以下是我尝试过的实现。
var keywords = string.Join(\" OR \", itemQuery.Keywords.Select(x => $\"\\\"{x}\\\"\"));
queryable = queryable.Where(f => !EF.Functions.Contains(f.TitleUpper, keywords));
传递的字符串将像这样格式化
\" 短语在这里\" OR \"单词\" OR \"某事\"
等等。所有 40 多个短语/单词。不幸的是,当我运行它时,它似乎比原始查询花费更长的时间!是否错误地执行了此操作?
标签: sql-server entity-framework-core ef-code-first