SQL 全文搜索 包含命令
Posted
技术标签:
【中文标题】SQL 全文搜索 包含命令【英文标题】:SQL Full text search Contains command 【发布时间】:2013-07-16 08:38:52 【问题描述】:我试图弄清楚为什么这两个语句的行为不同
选择不同的 FIELD1、FIELD2 来自 SomeTable WHERE CONTAINS(*,'WORD1') AND CONTAINS(*,'WORD2*') AND CONTAINS(*,'WORD3') 选择不同的 FIELD1、FIELD2 来自 SomeTable WHERE CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')我正在为我的全文搜索指定所有索引字段,那么为什么第二个命令不返回任何内容,但第一个命令返回预期结果?我想在一个 CONTAINS 语句中搜索所有字段中包含 WORD1 和 WORD2 和 WORD3 的所有字段。
【问题讨论】:
【参考方案1】:看起来您的第二个语句正在搜索整个字符串 。这就是它不返回任何结果的原因。此外,如所写,第一个也是用双引号搜索 。它是否返回 的任何结果?
【讨论】:
从等式中去掉双引号,它仍然不起作用。我的意思是,这种方式不支持 CONTAINS 子句中的 MULTIPLE FIELDS。【参考方案2】:我之前遇到过这个问题,这是设计使然。请参阅此 MS 支持article。
假设您有两列 c1 和 c2。您列出的查询
CONTAINS(*,'"WORD1" AND "WORD2*" AND "WORD3"')
被解释为
CONTAINS(c1,'"WORD1" AND "WORD2*" AND "WORD3"') or CONTAINS(c2,'"WORD1" AND "WORD2*" AND "WORD3"')
所以每个单词都必须在任一列(c1 或 c2)中。如果 WORD1 在 c1 中,而 WORD3 在 c2 中,则不会返回结果。
您的第一个查询有效,因为它被解释为
(CONTAINS(c1,'WORD1') OR CONTAINS(c2,'WORD1')) AND (CONTAINS(c1,'WORD2*') OR CONTAINS(c2,'WORD2*')) AND (CONTAINS(c1,'WORD3') OR CONTAINS(c2,'WORD3'))
在这种(第一种情况)中,不同的词可以存在于不同的列中,只要每个词都存在于至少一个列中。
【讨论】:
就是这样,现在我想知道如果没有动态 sql 我将如何做到这一点。我会有可变数量的单词。我的部分解决方案是我继续创建一个字段,将这些字段连接起来并编入索引,现在我的搜索按预期工作,但我失去了使用排名或进一步细化任何内容的能力,因为它都是一个字段。以上是关于SQL 全文搜索 包含命令的主要内容,如果未能解决你的问题,请参考以下文章