当前位置: 首页 > 面试题库 >

SQL Server 2008中的FREETEXT查询不匹配词组

年健
2023-03-14
问题内容

我在SQL Server
2008中有一个全文索引表,我正在尝试使用FULLTEXT查询确切的短语匹配。我认为不适合使用CONTAINS或LIKE,因为在其他情况下查询可能不准确(用户不会在双引号中加上词组),并且总的来说,我希望自由文本的灵活性。

根据文档[MSDN]中的FREETEXT:

如果freetext_string用双引号引起来,则执行短语匹配;否则,执行短语匹配。不执行词干和词库。

这会让我相信这样的查询:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')

仅会在“描述”字段中出现“市政厅”一词的情况下html" target="_blank">返回结果,但我得到的结果是这样的:

1曼宁厅残障坡道设计。
2天线调查。客户:克兰斯顿市政府工程部
3有关国际网球名人堂火灾损失的结构调查。
4调查在“先驱大厅”进行拟议卫星设计的屋顶调查。
… 等等

显然,这些结果包括我的短语中的至少一个单词,但不包含短语本身。更糟糕的是,我原以为可以对结果进行排名,但是我实际上想要的两个结果(因为它们包括实际短语)被掩埋了。

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'

1对马萨诸塞州昆西市政府大楼的外观进行了重大内部和内部装修
。2对波塔基特市政厅塔楼进行的结构设计调查受到泄漏的困扰。

我确定这是我不了解文档的一种情况,但是有什么方法可以实现我想要的?也就是说,能够传递不带引号的搜索字符串并准确获取我现在要获取的内容或带引号并仅获取确切的短语吗?


问题答案:

如您所说,FREETEXT查找短语中的每个单词,而不是全部短语。为此,您需要使用该CONTAINS语句。像这样:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

如果要获得结果的排名,则必须使用CONTAINSTABLE。它的工作原理大致相同,但是它返回一个包含两列的表:[Key]其中包含搜索表的主键,[Rank]为您提供结果的排名。



 类似资料:
  • 假设我的索引有两个文档: “Foo Bar” “Bar Foo” 当我对“bar foo”进行常规匹配查询时,两个文档都正确匹配,但它们获得了相等的相关性分数。然而,我希望单词的顺序在评分时是有意义的。换句话说,我希望“Bar Foo”有更高的分数。 因此,我尝试将match查询放在bool查询的must子句中,并包含一个match_prach(具有相同的查询字符串)作为shoul子句。在我使用“

  • 我正在尝试捕获异常,但无效。以下是我视图中的代码: 我还尝试了:“除了act_edit.DoesNotExist:”但错误仍然存在“活动匹配查询不存在”。你知道吗? 谢谢

  • 我使用的是django-allauth,我用以下细节配置了: 我设置了(因为我将默认站点更改为) 在settings.py中: 当我去: 我得到: 我做错了什么?

  • 问题内容: 我已经在Django中实现了密码恢复功能。用我的方法,新密码将发送到他输入的电子邮件ID。当我提供正确的电子邮件(数据库中存在的电子邮件ID)时,它的工作正常。但是,当我提供不在数据库中的电子邮件ID时,就会出现此错误“ DoesNotExist位于/​​ forgotPassword / UniversityDetails匹配查询不存在。”。有人可以解决这个问题吗?将在此处粘贴我的代

  • 问题内容: 我正在用查询查询我的elasticsearch索引。查询本身的结构与此类似 我希望能够确定所有这些查询中哪一个是与结果匹配的查询。是否有内置的elasticsearch方法允许这样做,还是我必须手动进行? 问题答案: 您可以使用命名查询,然后在结果中获得匹配的查询的名称。 然后,在结果中,您将获得一个数组,其中包含与文档匹配的查询的名称。

  • 问题内容: 我有未分析字符串字段的文档(由映射强制执行或全局设置)。我试图了解两者之间的实际区别是什么 和 我在术语查询的文档中看到,分析字符串时有区别(这不是我的情况)。 有理由使用vs 吗? 问题答案: 在查询中,不分析搜索到的术语(即),并且将其与倒排索引中存在的术语完全匹配。 在查询中,首先分析搜索到的术语(即),然后将其与倒排索引中存在的术语进行匹配。 在你的情况下,由于是在映射,你的第