> For the complete documentation index, see [llms.txt](https://hezhiqiang-book.gitbook.io/mysql/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hezhiqiang-book.gitbook.io/mysql/di-liu-zhang/cha-xun-kuo-zhan.md).

# 查询扩展

在本教程中，您将了解到基于自动相关性反馈的MySQL查询扩展扩展搜索结果。

## MySQL查询扩展简介

在某些情况下，用户希望根据他们拥有的知识来搜索信息。用户使用他们的知识来定义关键字来搜索信息，通常这些关键字太短。

为了帮助用户根据很短的关键字找到他们想要的内容，MySQL全文搜索引擎引入了一个称为查询扩展的概念。

查询扩展用于根据自动相关性反馈(或盲查询扩展)来扩大全文搜索的搜索结果。 从技术上讲，当使用查询扩展时，MySQL全文搜索引擎将执行以下步骤：

* *首先*，MySQL全文搜索引擎会查找与搜索查询匹配的所有行。
* *其次*，它检查搜索结果中的所有行，并找到相关词。
* *第三*，它再次执行搜索，但是基于相关词而不是用户提供的原始关键词来查询匹配。

从应用程序的角度来看，当搜索结果太少时，可以使用查询扩展。再次执行搜索，但通过查询扩展为用户提供与他们正在查找的内容相关和相关的更多信息。

要使用查询扩展，请在`AGAINST()`函数中使用`WITH QUERY EXPANSION`搜索修饰符。以下说明使用`WITH QUERY EXPANSION`搜索修饰符查询的语法。

```sql
SELECT column1, column2
FROM table1
WHERE MATCH(column1,column2) 
      AGAINST('keyword',WITH QUERY EXPANSION);
```

## MySQL查询扩展示例

我们来看一下查询扩展的例子，看看它是如何工作的。

我们将使用`products`表的`productName`列来演示查询扩展功能。首先，[启用此列的全文搜索索引](http://www.yiibai.com/mysql/activating-full-text-searching.html)。

```sql
ALTER TABLE products 
ADD FULLTEXT(productName);
```

*其次*，搜索的产品名称包含`1992`的项，而不使用查询扩展。

```
SELECT productName
FROM products
WHERE MATCH(productName) AGAINST('1992');
```

执行上面查询语句，得到以下结果 -

```
```

如上所见，搜索结果其产品名称包含`1992`有`2`个产品。

*第三*，可以通过使用查询扩展来扩展搜索结果，如下所示：

```sql
SELECT productName
FROM products
WHERE MATCH(productName) 
      AGAINST('1992' WITH QUERY EXPANSION);
```

执行上面查询语句，得到以下结果 -

```
```

当我们使用查询扩展时，在搜索结果中得到了更多行。 前两行是最相关的，其他行来自前两列的相关关键字，例如：`Ferrari`。

请注意，通过返回不相关的结果，盲查询扩展会显着增加噪声。 强烈建议您仅在搜索到的关键字较短时才使用查询扩展。

在本教程中，当用户提供的关键字很短时，我们向您介绍了MySQL查询扩展，以扩大搜索结果。
