使用 MySQL 和 TypeORM 从列中搜索值
Search values from columns with MySQL and TypeORM
如何使用最新版本的 TypeORM 在 MySQL 中进行全文查询?
我想搜索所有具有确定词或短语的人。例如,在 table "People" 中有:
@Column("varchar")
name: string;
@Column("varchar")
lastname: string;
@Column("text")
personalDescription: string;
因此,如果我输入 "Andrés"、"Niko"、"I am developer" 或其他任何内容,我想通过 [=25= 的 "Full-text" 功能找到拥有该信息的人] 在用户的名字、姓氏和个人描述中。
谢谢。
我对 mysql 全文没有太多经验。但我的简单测试是 运行.
实体:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Index({ fulltext: true })
@Column("varchar")
name: string;
@Index({ fulltext: true })
@Column("varchar")
lastname: string;
@Index({ fulltext: true })
@Column("text")
personalDescription: string;
}
Select 使用查询构建器:
const searchTerm = "programmer";
const result = await connection.manager.getRepository(User)
.createQueryBuilder()
.select()
.where(`MATCH(lastname) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.orWhere(`MATCH(name) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.orWhere(`MATCH(personalDescription) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.getMany();
如果您需要更高级的全文搜索,您必须查看 mysql 文档。
我把这个例子留在这里用 JOINS
const awards = await connection.manager.getRepository(Awards)
.createQueryBuilder("a")
.innerJoinAndSelect('a.category', 'c')
.innerJoinAndSelect('a.brand', 'b')
.Where(
`CONCAT(
'',
a.name, // Look for a coincidence on award name
a.model, // Look for a coincidence in model award
c.name, // Look for a coincidence in category name
b.name // Look for a coincidence in brand name
) LIKE '%${toSearch}%'`,
)
.getMany();
您必须将 toSearch
替换为要查找的词
如何使用最新版本的 TypeORM 在 MySQL 中进行全文查询?
我想搜索所有具有确定词或短语的人。例如,在 table "People" 中有:
@Column("varchar")
name: string;
@Column("varchar")
lastname: string;
@Column("text")
personalDescription: string;
因此,如果我输入 "Andrés"、"Niko"、"I am developer" 或其他任何内容,我想通过 [=25= 的 "Full-text" 功能找到拥有该信息的人] 在用户的名字、姓氏和个人描述中。
谢谢。
我对 mysql 全文没有太多经验。但我的简单测试是 运行.
实体:
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Index({ fulltext: true })
@Column("varchar")
name: string;
@Index({ fulltext: true })
@Column("varchar")
lastname: string;
@Index({ fulltext: true })
@Column("text")
personalDescription: string;
}
Select 使用查询构建器:
const searchTerm = "programmer";
const result = await connection.manager.getRepository(User)
.createQueryBuilder()
.select()
.where(`MATCH(lastname) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.orWhere(`MATCH(name) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.orWhere(`MATCH(personalDescription) AGAINST ('${searchTerm}' IN BOOLEAN MODE)`)
.getMany();
如果您需要更高级的全文搜索,您必须查看 mysql 文档。
我把这个例子留在这里用 JOINS
const awards = await connection.manager.getRepository(Awards)
.createQueryBuilder("a")
.innerJoinAndSelect('a.category', 'c')
.innerJoinAndSelect('a.brand', 'b')
.Where(
`CONCAT(
'',
a.name, // Look for a coincidence on award name
a.model, // Look for a coincidence in model award
c.name, // Look for a coincidence in category name
b.name // Look for a coincidence in brand name
) LIKE '%${toSearch}%'`,
)
.getMany();
您必须将 toSearch
替换为要查找的词