Как использовать FreeText в EF core 2.1

Я вижу, что ядро ​​Entity Framework 2.1 имеет новую функцию для использования FREETEXT, но я не уверен, как ее использовать, поскольку в Интернете нет примеров.

https://github.com/aspnet/EntityFrameworkCore/issues/11484

Кто-нибудь уже использовал это и мог бы дать мне быстрый пример?

У вас уже есть проблема в Полнотекстовый поиск в EF Core 2.1, о которой вы должны были упомянуть в своем вопросе.

Mark G 26.06.2018 18:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
1
4 131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сначала убедитесь, что у вас установлены соответствующие пакеты 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

Мне нужно проиндексировать имя столбца, которое я хочу использовать?

chobo2 26.06.2018 19:08

Да, вам нужно сначала настроить полнотекстовый индекс.

DavidG 26.06.2018 20:20

Я получаю CREATE FULLTEXT CATALOG statement cannot be used inside a user transaction. при применении пользовательской миграции. Любые идеи?

Liero 11.09.2018 15:32

@Liero Вам нужно подавить транзакции в вызове Sql, просто вызовите перегрузку со значением true для 2-го параметра, например. Sql("CREATE....", true);

DavidG 11.09.2018 15:45

Итак, нам совсем не повезло, если мы хотим искать более чем в одном столбце?

Jonathan Wood 05.09.2020 02:20

@JonathanWood Почему ты так говоришь?

DavidG 05.09.2020 19:35

Поскольку EF.Functions.FreeText() принимает только одну ссылку на столбец. Все мои текущие веб-сайты, реализующие полнотекстовый поиск, индексируют более одного столбца.

Jonathan Wood 05.09.2020 19:50

@JonathanWood Но вы можете использовать эту функцию несколько раз.

DavidG 05.09.2020 19:56

Мне нужен один запрос, который сканирует несколько столбцов. Я не думаю, что есть способ связать несколько вызовов вместе, но вам нужно будет включать один и тот же запрос в каждый из них. Я не думаю, что это возможно.

Jonathan Wood 05.09.2020 19:59

@JonathanWood Это то же самое, что и любой запрос, просто выполните FreeText(...) || FreeText(..) или что-то еще.

DavidG 05.09.2020 22:09

@DavidG: запросы полнотекстового поиска выглядят так: CONTAINSTABLE([Table], *, @SearchTerm). Звездочка указывает, что поиск должен выполняться во всех столбцах с полнотекстовым индексом. Так что это более оптимизировано, чем может показаться выражение OR. Возможно, есть вариант, о котором я не знаю, но я запросил Microsoft добавить поддержку для большего количества столбцов.

Jonathan Wood 06.09.2020 18:07

Есть идеи, доступен ли FromText и для MySQL?

Nelson Sousa 25.02.2021 02:14

@NelsonSousa Вы пробовали Google?

DavidG 25.02.2021 02:18

@DavidG да, я только что нашел метод расширения для SQL Server.

Nelson Sousa 25.02.2021 22:24

Другие вопросы по теме