gpt4 book ai didi

php - 不同的搜索词顺序在 Symfony 查询中应该有相同的结果

转载 作者:行者123 更新时间:2023-11-29 10:32:11 25 4
gpt4 key购买 nike

目前,我的搜索查询仅搜索完全匹配和正确的顺序。但我需要单词的顺序并不重要。

例如,新闻标题:内马尔转会巴黎圣日耳曼。我在接下来的搜索中得到了正确的结果

  • 内马尔巴黎圣日耳曼
  • 内马尔转会巴黎圣日耳曼

但我没有结果:

  • 巴黎圣日耳曼内马尔

这是我的代码:

// Create search tearm partial 
$searchTerms = explode(' ', $this->query->getTerm());
$searchTermPartial = '';
foreach($searchTerms as $searchTerm) {
$searchTermPartial = $searchTermPartial . '%' . $searchTerm .'%';
}

//Search part in Query
->andWhere(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like(
$queryBuilder->expr()->concat('translation.title', $queryBuilder->expr()->concat(
$queryBuilder->expr()->literal(' '), 'translation.shortDescription')), ":searchTermPartial"),
$queryBuilder->expr()->eq('o.code', ":searchTerm")
)

如何让词序变得不重要?

最佳答案

这就是您的 $searchTermPartial 的内容

//%PSG%%Neymar%

我有一张这样的 table

CREATE TABLE public.rol
(
id integer NOT NULL,
role character varying(255) NOT NULL,
CONSTRAINT rol_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.rol
OWNER TO postgres;

角色字段的值为[PSG Neymar,Neymar PSG,PSG, Neymar](4个不同行)

当我使用上面的内容执行查询时,这就是结果

query select * from rol where role like '%PSG%%Neymar%'

result 1;"PSG Neymar"

问题是您构建了错误的参数,您应该这样使用它:

    foreach ($searchTerms as $key => $term) {
//.....
$qb->andWhere($qb->expr()->like('r.role', ':term' . $key))
//.....
->setParameter('term' . $key, '%' . $term . '%');
//.....
}

上面的代码将输出以下查询

select * from rol where role like '%PSG%' and role like '%Neymar%'

结果如下

1;“巴黎圣日耳曼内马尔”

2;“巴黎圣日耳曼内马尔”

如果使用 orWhere() 选项,您可以获得四个记录。

希望对你有帮助

关于php - 不同的搜索词顺序在 Symfony 查询中应该有相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47200174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com