全文搜索 EF Core 和 SQL Server

问题描述 投票:0回答:1

假设我在名为

20 million
的表中有
User
记录,并且我希望在名为
full text search
的列上有
Description

我读到了 EF Core 中的

FreeText
,它看起来像这样:

   var results = _context.Users
                         .Where(e => EF.Functions.FreeText("*", "search criteria"));

但是我想要一个

Full Search
good performance

有什么建议吗?

c# entity-framework linq asp.net-core entity-framework-core
1个回答
0
投票

我有一些关于优化大表上全文搜索性能的建议。 在

Description
列上创建全文索引以实现高效的全文搜索

CREATE FULLTEXT INDEX ON dbo.User(Description) KEY INDEX PK_User;

您可以在 LINQ 查询中使用

FreeText
谓词,而不是使用
CONTAINS
函数(该函数对于大型数据集效率较低)。
CONTAINS
谓词利用全文索引进行高效的全文搜索

  var searchTerm = "search criteria";
var results = _context.Users
                      .Where(e => EF.Functions.Contains(e.Description, searchTerm))
                      .ToList();

根据您的独特需求和数据的性质,可能需要进一步优化全文索引。这可能涉及微调语言、断字符和停用词等属性。

还有另一个想法:合并 Elasticsearch,一个著名的开源软件 搜索和分析引擎因其一流的性能而备受赞誉 和可扩展性。通过建立 Elasticsearch 并对 SQL 建立索引 通过 Logstash 等工具的数据库数据,您可以利用 Elasticsearch 强大的查询 DSL 和高级全文搜索 有效简化您的搜索的功能。

© www.soinside.com 2019 - 2024. All rights reserved.