MySQL 搜索引擎查询未返回所有结果

时间:2021-04-04 19:56:03

标签: mysql

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

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

这是我目前所拥有的:

import React, { useContext } from 'react';

const ParentComponent = () => {
  const {showButton, setShowButton} = useContext(ButtonContext);

  return (
    <>
      {showButton && (
        <Button
          onClick={() => {
            // do your click stuff and
            // reset the showButton context value
            setShowButton(false)
           }
          }
        >
        </Button>)}
    </>
  )
}

这样做的问题是它只会返回 index_value 在同一行中同时包含 'apple' 和 'banana' 的结果,而如果相同的版本 ID 有单独的关键字用于 'apple' 和'香蕉'。

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

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

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

谁能建议最好的方法?

更新: 这是我想要的一个更清晰的例子

说这是releases_index表:

index_releaseId   count
1                 2

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

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

如果我只搜索“wandavision”,那么 21956 和 21998 都会是结果:

# index_releaseId, count
'21956', '2'

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

1 个答案:

答案 0 :(得分:0)

看看这个。现在我如果找到苹果就加 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;
相关问题