gpt4 book ai didi

sql - PostgreSQL 10 - 返回具有匹配的 LIKE 模式的列(TEXT)值的一部分并且它在相邻的单词中

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

我正在尝试实现类似于 Google 搜索在显示结果时所做的事情,因此在标题和 URL 下,我们得到了文本的简短预览以及搜索字符串中的匹配词。

文本数据示例:

Normally if you have all the relationship setup properly between models and reflection table objects, you will only need to deal with related models (by appending model objects into the relationship InstrumentList) in order to insert data into reflection tables.

用户输入:

relation

结果:

Normally if you have all the relationship setup properly between models

现在,我想到了以下(非常糟糕的)实现:

SELECT id,
COALESCE(
(regexp_match(text, '(?i)\s.*?(relation.*?\s(\w+\s+){3})'))[1]
, (regexp_match(text, '(?i)((\w+\s+){3}relation.*?)\s'))[1]
) AS text
FROM drafts.draft
WHERE
text ILIKE '%relation%';

我真的不擅长正则表达式,所以它只显示下一个词(而不是前一个词),如果我们将上面给定文本的 3 更改为 8,它返回的不是 8 个词,而是更多(我认为这是因为逗号在文中)。此外,如果到文本末尾剩下的单词少于 N 个,它会返回 NULL。


简历:

给定一个随机长度的文本,我们要设置参数 match, N,其中 match 是我们的子字符串,N 是一个数字我们希望从每一侧(之前和之后)获得文本中第一个匹配短语的单词。

最佳答案

您可以使用substring() 根据模式进行提取。这似乎可以满足您的需求:

select substring(str from '((\w+\W){0,3}[\w]*relation[\w]*(\W[\w]+){0,3})')
from (values ('Normally if you have all the relationship setup properly between models and reflection table objects, you will only need to deal with related models (by appending model objects into the relationship InstrumentList) in order to insert data into reflection tables.')) v(str)

关于sql - PostgreSQL 10 - 返回具有匹配的 LIKE 模式的列(TEXT)值的一部分并且它在相邻的单词中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979220/

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