【问题标题】:MySQL search engine query not returning all resultsMySQL搜索引擎查询未返回所有结果
【发布时间】:2021-04-04 19:56:03
【问题描述】:

我有一个包含“releases”和“releases_index”表的数据库。发布表中的每一行都有一个ID,索引表包含与发布表的每一行相关的关键字。发布表的每一行都有多个关键字。

我正在尝试创建一个查询,该查询在索引表中搜索一个或多个关键字,并计算每个关键字有多少匹配项,以从最佳匹配开始的匹配顺序返回结果。

这是我目前所拥有的:

SELECT index_releaseId, COUNT(1) as count FROM releases_index
WHERE index_value LIKE '%apple%' AND index_value LIKE '%banana%'
GROUP BY index_releaseId
ORDER BY count DESC

这样做的问题是它只会返回 index_value 在同一行中同时具有“apple”和“banana”的结果,而如果相同的发布 ID 具有单独的关键字“apple”和'香蕉'。

如果 index_releaseId 1 有两个关键字(苹果和香蕉),那么我希望得到这个结果:

index_releaseId   count
1                 2

我希望我已经清楚地解释了这一点。本质上它只是一个搜索引擎。

谁能建议最好的方法?

更新: 这是我想要的一个希望更清晰的示例

说这是releases_index表:

# index_id, index_releaseId, index_value
'435101', '21956', 'Scarlet Witch'
'435104', '21956', 'Television'
'435102', '21956', 'WandaVision'
'435109', '21998', 'WandaVision'

如果我在我的搜索引擎中搜索“猩红女巫 wandavision”,则结果为发布 ID 21956。尽管 21998 在一个短语上匹配,但它不会是结果,因为它没有匹配 'scarlet' 或 'witch' 的行。根据上面的查询,结果应该是这样的:

# index_releaseId, count
'21956', '2'

如果我只搜索“wandavision”,则 21956 和 21998 都会得到结果:

# index_releaseId, count
'21956', '1'
'21998', '1'

希望这能澄清我在寻找什么,但是,我发现很难解释。

【问题讨论】:

  • index_value能否连续同时为同一个苹果和香蕉,请加个minimal reproducible example
  • 我想是这样 - 不完全确定你的意思
  • 您选择的每一行都必须有 index_value apple banana,否则不会选择 iz,所以请向我们展示示例数据和想要的 rsult,以便我们为您提供帮助跨度>
  • @Josh,this answer 你在找什么?
  • @Eugene 我不这么认为我害怕

标签: mysql


【解决方案1】:

看看这个。现在如果我找到苹果我加 1,如果我找到香蕉我也加 1。 唯一的问题是,如果字符串中的苹果不止一次,我也只加 1。

SELECT 
  index_releaseId,
  SUM((index_value LIKE '%apple%') + (index_value LIKE '%banana%')) as count 
FROM releases_index
WHERE index_value LIKE '%apple%' AND index_value LIKE '%banana%'
GROUP BY index_releaseId
ORDER BY count DESC;

【讨论】:

  • 这不是我真正想要的
  • @Josh - 我改变了答案
猜你喜欢
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2018-11-17
相关资源
最近更新 更多