Skip to content

[Bug] There is a bug in full-text search #4299

@GoXian

Description

@GoXian

Contact Information

[email protected]

MaxKB Version

每个版本

Problem Description

SELECT paragraph_id, comprehensive_score, comprehensive_score as similarity FROM ( SELECT DISTINCT ON ("paragraph_id") ( similarity ),* ,similarity AS comprehensive_score FROM ( SELECT *,ts_rank_cd(embedding.search_vector,websearch_to_tsquery('simple',%s),32) AS similarity FROM embedding ${keywords_query}) TEMP ORDER BY paragraph_id, similarity DESC ) DISTINCT_TEMP WHERE comprehensive_score>%s ORDER BY comprehensive_score DESC LIMIT %s

这是你们的全文检索sql 语句,通过验证和查看代码发现。
在子chunk层级进行ts_rank_cd的计算,实际上会导致段落被拆分后的子chunk可能无法反映整个段落的相关性。如果一个段落包含查询词“你好”和“世界”,但是被分割成两个子chunk,一个包含“你好”,另一个包含“世界”,那么这两个子chunk可能都会有较低的相似度分数,而实际的段落应该有较高的相似度。(甚至说第一个子chunk没有出现,”世界“,另外一个子 chunk没有”你好“,那么这个段落将不会返回)

建议你修改成对整个段落进行ts_rank_cd评分。
我发现你V2.2.1的代码也是如此。

Steps to Reproduce

在v1.10.8版本中使用大于256的段落,前256字符出现”你好“,不出现”世界“。另外一个子chunk范围内出现”世界“,不出现”你好“。query为你好世界,进行全文检索测试。

The expected correct result

No response

Related log output

Additional Information

No response

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions