Я вижу, что ядро Entity Framework 2.1 имеет новую функцию для использования FREETEXT, но я не уверен, как ее использовать, поскольку в Интернете нет примеров.
https://github.com/aspnet/EntityFrameworkCore/issues/11484
Кто-нибудь уже использовал это и мог бы дать мне быстрый пример?





Сначала убедитесь, что у вас установлены соответствующие пакеты Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.SqlServer.
Затем убедитесь, что у вас есть следующий импорт:
using Microsoft.EntityFrameworkCore;
Теперь вы можете использовать функцию SQL FREETEXT следующим образом:
var results = context.Foos
.Where(f => EF.Functions.FreeText(f.ColumnName, "search text"));
Примечание. Вы можете увидеть, как это работает, в модульных тестах Например.
Чтобы создать полнотекстовый индекс, в Entity Framework Core в настоящее время нет поддержки для автоматического создания этого. Вместо этого вам нужно вручную добавить код в миграцию. Итак, создайте миграцию, как обычно, откройте ее и добавьте строки, подобные этой:
Sql("CREATE FULLTEXT CATALOG ft AS DEFAULT", true);
Sql("CREATE FULLTEXT INDEX ON dbo.TableName(ColumnName) KEY INDEX UI_TableName_ColumnName WITH STOPLIST = SYSTEM", true);
Обратите внимание на 2-й параметр в вызове Sql для подавления транзакций. Если вы опустите это, вы можете получить сообщение об ошибке:
CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction
Мне нужно проиндексировать имя столбца, которое я хочу использовать?
Да, вам нужно сначала настроить полнотекстовый индекс.
Я получаю CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction. при применении пользовательской миграции. Любые идеи?
@Liero Вам нужно подавить транзакции в вызове Sql, просто вызовите перегрузку со значением true для 2-го параметра, например. Sql("CREATE....", true);
Итак, нам совсем не повезло, если мы хотим искать более чем в одном столбце?
@JonathanWood Почему ты так говоришь?
Поскольку EF.Functions.FreeText() принимает только одну ссылку на столбец. Все мои текущие веб-сайты, реализующие полнотекстовый поиск, индексируют более одного столбца.
@JonathanWood Но вы можете использовать эту функцию несколько раз.
Мне нужен один запрос, который сканирует несколько столбцов. Я не думаю, что есть способ связать несколько вызовов вместе, но вам нужно будет включать один и тот же запрос в каждый из них. Я не думаю, что это возможно.
@JonathanWood Это то же самое, что и любой запрос, просто выполните FreeText(...) || FreeText(..) или что-то еще.
@DavidG: запросы полнотекстового поиска выглядят так: CONTAINSTABLE([Table], *, @SearchTerm). Звездочка указывает, что поиск должен выполняться во всех столбцах с полнотекстовым индексом. Так что это более оптимизировано, чем может показаться выражение OR. Возможно, есть вариант, о котором я не знаю, но я запросил Microsoft добавить поддержку для большего количества столбцов.
Есть идеи, доступен ли FromText и для MySQL?
@NelsonSousa Вы пробовали Google?
@DavidG да, я только что нашел метод расширения для SQL Server.
У вас уже есть проблема в Полнотекстовый поиск в EF Core 2.1, о которой вы должны были упомянуть в своем вопросе.