【问题标题】:SQL Select result with FREETEXT / returning row with more occurencesSQL 选择带有 FREE TEXT 的结果/返回出现次数较多的行
【发布时间】:2021-02-28 19:20:12
【问题描述】:

我对 SQL Server 有以下搜索词:

我想买三星手机,型号应该是 Galaxy S9

表:

ID TEXT
1 samsung s8
2 celular s9
3 samsung galaxy s9
4 galasxy s10

我希望选择返回 ID 3,因为它出现的次数更多。

【问题讨论】:

  • 你可以考虑全文搜索。
  • 我使用了 Freetext,但它返回了所有行,我希望返回的是出现次数更多的行。 ``` select * from Table where FREETEXT(Text,'我要买三星手机,型号应该是galaxy s9')
  • “SQL Select result with mo”是什么意思?
  • CONTAINSTABLE() 最后一个参数1 可能吗?
  • 我要搜索一下 CONTAINSTABLE(),谢谢!还有关于标题,我刚刚更新了一下,才发现写错了

标签: sql sql-server select ssms


【解决方案1】:

您可以在 单词 级别执行此操作的一种方法是:

select t.*
from t cross apply
     (select count(*) as cnt
      from string_split(t.text, ' ') s1 cross join
           string_split(@sentence, ' ') s2
           on s1.value = s2.value
     ) ss
order by ss.cnt desc;

注意事项:

  • 这只会在两个短语中查找完全匹配的单词。
  • 这要求单词在text 和“句子”中都用空格分隔。
  • 重复的单词可能会通过倒计时。如果需要,可以管理(比如使用count(distinct s1.value) as cnt)。

【讨论】:

    【解决方案2】:

    有很多方法可以选择两个项目。例如:

    SELECT 'I want to buy a ' + A.BrandName + ' cellphone and the model should be ' + A.ModelName 
    FROM (
        SELECT SUBSTRING(TEXT, 1, LEN('sumsung')) AS BrandName
            , SUBSTRING(TEXT, LEN(SUBSTRING(TEXT, 1, LEN('sumsung')))+1, LEN(TEXT)) AS ModelName
        FROM TABLE_NAME
        WHERE TEXT LIKE N'%samsung%' AND TEXT LIKE N' %galaxy s9%'
    ) AS A
    

    【讨论】:

    • 我希望选择查询像一个句子,返回应该是出现次数较多的行。那句话“我想买个三星手机,型号应该是galaxy s9”。只是一个例子。
    • 我更新了我的答案。检查并给我回复。
    • 非常感谢您的回答,但我想要更通用的东西,那句话只是一个例子。我的情况是我想构建一个聊天机器人,并且我希望此选择返回最佳答案,其中包含更多用户提出的问题。
    • 谢谢,我刚刚回复了!非常感谢您的帮助,干杯!
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多