MYSQL 中未正确识别不同的术语

Distinct terms not being identified correctly in MYSQL

我创建了一个数据库,用于存储从孟加拉语文本文档创建的简单倒排索引。

Table 姓名: simple_index , 主键 {Term, Document_id}

Table 定义:

CREATE TABLE IF NOT EXISTS basicindex.simple_index (
    term varchar(255) NOT NULL, 
    doc_id INT NOT NULL,
    frequency INT NOT NULL,
    PRIMARY KEY (term,doc_id) 
)

奇怪的是,我发现下面两个不同的词:

  1. খুঁজে - 存在于文件 3、16、34
  2. খুজে - 存在于文档 1

当我执行以下查询时:

查询 1:

select doc_id from basicindex.simple_index where term='খুঁজে';

查询 2:

select doc_id from basicindex.simple_index where term = 'খুজে';

return 4 行声称 খুঁজে 和 খুজে 出现在所有四个文档中。

我从日志中发现 [Distinct Term, document id, frequency] খুঁজে 仅针对文档 id 1 插入:

正在为 খুজে 插入索引 ->{ DocID:1,频率:1}

('খুজে', 1, 1)

并且 খুঁজে 被插入到文档 ID 3、16 和 34

正在为 খুঁজে 插入索引 ->{ DocID:3,频率:1}

('খুঁজে', 3, 1)

正在为 খুঁজে 插入索引 ->{ DocID:16,频率:2}

('খুঁজে', 16, 2)

正在为 খুঁজে 插入索引 ->{ DocID:34,频率:1}

('খুঁজে', 34, 1)

以下是术语的 unicode 值:

খুঁজে [('খ', 2454), ('ু',2497), ('ঁ',2433), ('জ',2460), ('ে',2503)]

খুজে [('খ',2454), ('ু',2497), ('জ',2460), ('ে',2503)]

我正在使用 MYSQL 版本 8.0.13。我请求有人帮助我理解为什么 MYSQL 数据库表现出这种行为。为什么无法区分“খুঁজে”和“খুজে”?我该怎么做才能纠正这个问题?

我已附上文档 1、3、16 和 34 以及输入和输出日志文件,供您参考 here

both return 4 rows claiming that খুঁজে and খুজে are present in all the four documents.

检查使用的 COLLATION。明确指定所需的 COLLATE。

举个例子:

CREATE TABLE IF NOT EXISTS simple_index (
    term varchar(255) NOT NULL, 
    doc_id INT NOT NULL,
    frequency INT NOT NULL,
    PRIMARY KEY (term,doc_id) 
);
INSERT INTO simple_index VALUES
('খুঁজে', 1, 0 ),
('খুজে', 2, 0 );
SELECT * FROM simple_index;
term doc_id frequency
খুঁজে 1 0
খুজে 2 0
select doc_id from simple_index where term = 'খুঁজে';
select doc_id from simple_index where term = 'খুজে';
| doc_id |
| -----: |
|      1 |
|      2 |

| doc_id |
| -----: |
|      1 |
|      2 |
select doc_id from simple_index where term = 'খুঁজে'COLLATE utf8mb4_bin;
select doc_id from simple_index where term = 'খুজে' COLLATE utf8mb4_bin;
| doc_id |
| -----: |
|      1 |

| doc_id |
| -----: |
|      2 |

db<>fiddle here