假设我在名为
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
有什么建议吗?
我有一些关于优化大表上全文搜索性能的建议。 在
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 和高级全文搜索 有效简化您的搜索的功能。