我目前正在研究MySQL命令,并在全文索引中使用了“MATCH…AGAINST”命令。当它与“stopword”(在我的例子中是“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秒)”。我现在意识到“和”是一个停止词。
我的问题是“stopword”是什么意思?我怎么知道哪个词是stopword?如果我真的想选择标题中包含“And”的查询,该怎么办?
最佳答案
我的问题是“stopword”是什么意思。。。
stopword是在全文搜索中作为关键字给定时将被忽略的单词。
有关更多信息,请阅读stopwords上的维基百科页面。
MySQL使用这个术语的方式与通常的定义是一致的。
... 我怎么知道哪一个词是停止词?
对于InnoDB表,您可以查询INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
表。
对于MyISAM搜索索引,停止字是从文件加载的。可以在运行时使用Java文件I/O读取该文件,但显然不能通过数据库查询访问它。
如果我真的想选择标题中包含“And”的查询,该怎么办?
MySQL文档解释了如何做到这一点;请参见Section 12.9.4 Full-Text Stopwords。(这里的细节太多,无法复制。)
我的理解是,您需要更改配置并重新启动数据库服务器以更改停止符。对于InnoDB表,还需要重新生成表的全文索引。
不幸的是,您不能(有效地)更改每个查询的停止字。。。如果这是你的目标。
关于mysql - 在MySQL中,“Stopword”一词是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56412773/