gpt4 book ai didi

python - sqlalchemy 全文搜索多列和 postgresql 中的部分搜索

转载 作者:行者123 更新时间:2023-11-29 12:24:39 26 4
gpt4 key购买 nike

我已经对此进行了很多搜索,但我还没有找到最好的解决方案。假设我们有下表:

Class User(DeclarativeBase):
__tablename__ = 'users'

id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)
description = Column(String)

与用户:

  • 安迪 |约翰逊 |废话废话

  • 安德丝 |布什 |呜呜呜

搜索应包括 first_namelast_namedescription 列。

我想搜索 ohns 查询,在我的结果中,我想知道匹配的列是什么以及结果是通过完全匹配还是部分匹配匹配的?

我已经尝试使用包含 3 个提到的列的单个 ts_vector,但我无法提取有关搜索结果的更多详细信息。我应该以某种方式将全文与 pg_trgm 函数结合起来吗?

最佳答案

我认为您可以使用三元组相似度来准确了解有关匹配类型和涉及的列的信息。

我做了一个简单的SQL例子作为演示:

SELECT "first_name", "last_name", "description",
CASE
WHEN SIMILARITY("first_name", 'ohns') >= 1.0 THEN 'exact'
WHEN SIMILARITY("first_name", 'ohns') > 0.0 THEN 'partial'
ELSE 'no'
END AS "first_name_match",
CASE
WHEN SIMILARITY("last_name", 'ohns') >= 1.0 THEN 'exact'
WHEN SIMILARITY("last_name", 'ohns') > 0.0 THEN 'partial'
ELSE 'no'
END AS "last_name_match",
CASE
WHEN SIMILARITY("description", 'ohns') >= 1.0 THEN 'exact'
WHEN SIMILARITY("description", 'ohns') > 0.0 THEN 'partial'
ELSE 'no'
END AS "description_match"
FROM (VALUES
('Andy', 'Johnson', 'blah blah blah'),
('Andress', 'Bush', 'blah blah'),
('Ohns', 'Johnson', 'blah')
) AS I("first_name", "last_name", "description")
WHERE (SIMILARITY("first_name", 'ohns') + SIMILARITY("last_name", 'ohns') + SIMILARITY("description", 'ohns')) > 0.0

first_name | last_name | description | first_name_match | last_name_match | description_match
------------+-----------+----------------+------------------+-----------------+-------------------
Andy | Johnson | blah blah blah | no | partial | no
Ohns | Johnson | blah | exact | partial | no

您可以在此处查看正在运行的 SQL:

http://sqlfiddle.com/#!17/9eecb/6356

关于python - sqlalchemy 全文搜索多列和 postgresql 中的部分搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47228219/

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