hun*_*eox 5 mysql full-text-search
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}
Run Code Online (Sandbox Code Playgroud)
你能向我解释一下什么是 QUERY EXPANSION 以及 MySQL 使用这种模式做什么吗?
小智 6
对您问题的简短回答是,查询扩展通过向搜索词添加额外的相关信息来增强原始搜索词。错误引用了Derek 链接中的示例:
\n\n\n\n\n例如,当用户不确定如何拼写 \xe2\x80\x9cMaigret\xe2\x80\x9d 时,可以搜索 Georges Simenon 撰写的关于 \n Maigret 的书籍。搜索\n \xe2\x80\x9cMegre 和不情愿的证人\xe2\x80\x9d 仅找到\xe2\x80\x9cMaigret 和\n 不情愿的证人\xe2\x80\x9d,而没有查询扩展。使用查询\n 扩展进行的搜索在第二遍中查找包含单词 \xe2\x80\x9cMaigret\xe2\x80\x9d 的所有书籍。
\n
本教程应该会让事情变得更清楚:
\n\n摘要:在本教程中,您将了解 MySQL 查询扩展,以基于自动相关性反馈来拓宽搜索结果。
\n\n在某些情况下,用户希望根据他们所拥有的知识来搜索信息。用户使用他们的知识来定义关键字来搜索信息,并且通常这些关键字太短。为了帮助用户根据过短的关键词找到自己想要的内容,MySQL全文搜索引擎引入了一个称为查询扩展的概念。
\n\n查询扩展用于基于自动相关性反馈(或盲查询扩展)来拓宽全文搜索的搜索结果。从技术上讲,MySQL全文搜索引擎在使用查询扩展时执行以下步骤:
\n\n从应用的角度来看,当搜索结果太少时,可以使用查询扩展。您再次执行搜索,但通过查询扩展为用户提供更多与他们正在寻找的内容相关的信息。
\n\n要使用查询扩展,您可以在函数WITH QUERY EXPANSION
中使用搜索修饰符AGAINST()
。下面说明了使用搜索修饰符的查询语法WITH QUERY EXPANSION
。
SELECT column1, column2\nFROM table1\nWHERE MATCH(column1,column2)\n AGAINST(\'keyword\',WITH QUERY EXPANSION)\n
Run Code Online (Sandbox Code Playgroud)\n\n让\xe2\x80\x99s通过一个例子来了解MySQL查询扩展是如何工作的。
\n\n我们将使用表productName
的列products
来演示查询扩展功能。首先,我们启用本专栏的全文搜索功能。
ALTER TABLE products\nADD FULLTEXT(productName)\n
Run Code Online (Sandbox Code Playgroud)\n\n其次,我们不使用查询扩展来搜索产品名称包含1992
关键字的产品。
SELECT productName\nFROM products\nWHERE MATCH(productName) AGAINST(\'1992\')\n
Run Code Online (Sandbox Code Playgroud)\n\n给予
\n\n+-----------------------------------+\n| productName |\n+-----------------------------------+\n| 1992 Ferrari 360 Spider red |\n| 1992 Porsche Cayenne Turbo Silver |\n+-----------------------------------+\n2 rows in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n如您所见,搜索结果中有 2 个产品名称包含 的产品1992
。
第三,我们可以使用查询扩展来扩大搜索结果,如下语句:
\n\nSELECT productName\nFROM products\nWHERE MATCH(productName)\n AGAINST(\'1992\' WITH QUERY EXPANSION)\n
Run Code Online (Sandbox Code Playgroud)\n\n给予
\n\n+-------------------------------------+\n| productName |\n+-------------------------------------+\n| 1992 Porsche Cayenne Turbo Silver |\n| 1992 Ferrari 360 Spider red |\n| 2001 Ferrari Enzo |\n| 1932 Alfa Romeo 8C2300 Spider Sport |\n| 1948 Porsche 356-A Roadster |\n| 1948 Porsche Type 356 Roadster |\n| 1956 Porsche 356A Coupe |\n+-------------------------------------+\n7 rows in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n当我们使用查询扩展时,我们在搜索结果中获得了更多行。前两行是最相关的,其他行来自前两行中的相关关键字,例如Ferrari
。
请注意,盲目查询扩展往往会通过返回不相关的结果来显着增加噪音。强烈建议您仅在搜索关键字较短时才使用查询扩展。
\n\n在本教程中,我们向您介绍了 MySQL 查询扩展,以在用户提供的关键字较短时扩大搜索结果。
\n\n\n 归档时间: |
|
查看次数: |
4155 次 |
最近记录: |