我目前正在研究MySQL命令,并被困在FULLTEXT索引上使用“ MATCH ... AGAINST”命令。当它与“停用词”(在我的情况下是“ and”)相对时,它返回一个“空集”。
这就是我所做的。我正在使用的数据库包含书籍及其作者的列表。我正在尝试选择标题中包含“ and”的条目。这是我的“经典”表格中的列表。
+--------------------+------------------------------+
| author | title |
+--------------------+------------------------------+
| Mark Twain | The Adventures of Tom Sawyer |
| Jane Austen | Pride and Prejudice |
| Charles Darwin | The Origin of Species |
| Charles Dickens | The Old Curiosity Shop |
| William Shakespear | Romeo and Juliet |
+--------------------+------------------------------+
这是我写的代码
SELECT author, title FROM classics
WHERE MATCH(author, title) AGAINST('and');
Empty set (0.00 sec)
我期望的结果是“傲慢与偏见”和“罗密欧与朱丽叶”,而不是“空置(0.00秒)”。我现在意识到“和”是一个停用词。
我的问题是“停用词”是什么意思,我怎么知道哪个词是停用词?如果我真的想选择标题中包含“ and”的查询,该怎么办?
我的问题是“停用词”是什么意思?
停用词是在全文搜索中作为关键字给出时将被忽略的词。
有关更多信息,请阅读Wikipedia页面上的停用词。
MySQL以与普通定义一致的方式使用该术语。
...我怎么知道哪个词是停用词?
对于InnoDB表,您可以查询该INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
表。
对于MyISAM搜索索引,停用词是从文件中加载的。可能可以在运行时使用Java文件I / O读取文件,但是显然无法通过数据库查询访问该文件。
如果我真的想选择标题中包含“ and”的查询,该怎么办?
MySQL文档解释了如何做到这一点。请参阅第12.9.4节全文停用词。(有太多细节无法在此处复制。)
我的理解是,您需要进行配置更改并重新启动数据库服务器以更改停用词。对于InnoDB表,您还需要重新生成表的全文本索引。
不幸的是,您不能(有效地)更改每个查询的停用词...如果您要这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句