5

我的项目基于问答(stackoverflow 风格)。

我需要允许用户搜索以前提出的问题。

问题表将如下所示:

Questions
-------------------------------------------------
id                 questions
-------------------------------------------------
1                  How to cook pasta?
2                  How to Drive a car?
3                  When did Napoleon die?

现在,当我要写一些要搜索的东西时,我会写这样的东西:

When did Brazil win the world cup?

假设我要将这个字符串分割成一个字符串数组

获取包含这些字符串的所有问题的最佳SELECT SQL 查询是什么,忽略每个单词的大写和小写,并按较少提及的单词对结果进行排序,为什么?

因为会有很多问题会包含When、and、will、how等,但不会有很多问题会涉及到Brazil,所以Brazil就像Key Word

我正在使用 SQL Server 2008。

4

3 回答 3

6

您真的不想在原始 SQL 中执行此操作。

我建议您查看数据库的全文搜索选项,可能是一个不错的起点。

于 2013-01-16T13:05:07.037 回答
1

在 mysql 中,你有全文索引和 match() 选择函数,它只允许这样做,在 SQL Server 中,你应该使用函数 Contains() 在 http://msdn.microsoft.com/en-us/library上查找更多信息/ms142571.aspx

于 2013-01-16T13:06:12.510 回答
0

你的选择不是最好的。看看开源的 Apache Solr 项目。http://lucene.apache.org/solr/

Solr 是一个独立的企业搜索服务器,具有类似 REST 的 API。您可以通过 XML、JSON、CSV 或 HTTP 上的二进制文件将文档放入其中(称为“索引”)。您通过 HTTP GET 查询它并接收 XML、JSON、CSV 或二进制结果。

  • 针对高容量 Web 优化的高级全文搜索功能
  • 基于流量标准的开放接口 - XML、JSON 和 HTTP
  • 全面的 HTML 管理界面 服务器统计
  • 通过 JMX 公开以进行监控 线性可扩展、自动索引
  • 复制、自动故障转移和恢复 近实时索引
  • 灵活且可适应 XML 配置 可扩展插件架构

查看详细功能和特别查询部分。您的应用程序所需的一切。

于 2013-01-16T15:57:53.193 回答