django SQL查询,以任何顺序查找确切的单词

628mspwn  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(106)

我有一个postgres表Article,它有三列-titledescriptioncategories。所有三列都包含纯文本。
我有2个搜索词-比如word1word2
我想找到记录的标题+描述+类别包含所有确切的搜索词,以任何顺序。

  • 需要精确的不区分大小写的匹配。男人不应该和女人作对。
  • 搜索词可以以任何顺序出现。如果我们搜索“污染全球变暖”-它应该匹配“…全球变暖加剧了有毒的混合污染......”

需要帮助实现一个程序(如果不可能通过查询),我们可以在搜索词列表中传递,它应该返回记录列表。
任何指针将是一个很大的帮助。
顺便说一句,我打算在Django中使用它。如果使用django ORM可以更好地实现这一要求,那也应该足够了。

mzillmmw

mzillmmw1#

您可以:

select *
from (select lower(title || description || categories) as txt from t)
where txt like lower('%word1%') and txt like lower('%word2%')

字符串

f45qwnt8

f45qwnt82#

考虑到您不希望它们以特定的顺序排列,您可以通过将两个列连接到一个新列中,然后检查它们的条件来匹配语法。

SELECT * 
FROM (SELECT LOWER(CONCAT(col1, ' ', col2)) AS conc_col from table)
WHERE conc_col LIKE LOWER('%word1%') AND conc_col LIKE LOWER('%word2%')

字符串
注意,使用AND只会在两个单词都存在时返回字符串。

相关问题