- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经看过十几个“类似”的问题,但运气不佳。我明白 +
在 BOOLEAN 模式下附加到 FULLTEXT 中的关键字具有特殊含义,但是,如果我们的关键字实际上包含 +
符号作为文本/字符串的后缀部分怎么办。我们怎样才能仍然使用全文搜索并获得正确的结果?
数据库结构
CREATE TABLE `ft_test` (
`i_id` int(11) NOT NULL,
`i_desc` mediumtext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `ft_test`
ADD PRIMARY KEY (`i_id`) USING BTREE;
ALTER TABLE `ft_test` ADD FULLTEXT KEY `i_desc` (`i_desc`);
ALTER TABLE `ft_test`
MODIFY `i_id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;
数据库数据
SELECT * FROM ft_test;
+------+-----------+
| i_id | i_desc |
+------+-----------+
| 1 | test |
| 2 | test+ |
| 3 | test++ |
| 4 | test + |
| 5 | test plus |
+------+-----------+
测试 #1:喜欢查询
SELECT * FROM ft_test WHERE i_desc LIKE 'test+%';
+------+--------+
| i_id | i_desc |
+------+--------+
| 2 | test+ |
| 3 | test++ |
+------+--------+
测试 #2:全文查询
SELECT *, MATCH(`i_desc`) AGAINST ('"test+"' IN BOOLEAN MODE) AS RELEVANCE
-> FROM `ft_test`
-> WHERE MATCH(`i_desc`) AGAINST ('"test+"' IN BOOLEAN MODE)
-> ORDER BY RELEVANCE;
+------+-----------+-----------+
| i_id | i_desc | RELEVANCE |
+------+-----------+-----------+
| 1 | test | 1 |
| 2 | test+ | 1 |
| 3 | test++ | 1 |
| 4 | test + | 1 |
| 5 | test plus | 1 |
+------+-----------+-----------+
如您所见,在这种情况下,LIKE 查询实际上返回了更好的排序结果。我也尝试过使用引号进行完全匹配,结果相同。添加像“test\+”这样的“特殊”字符也无济于事。虽然 FT 结果并非毫无用处,但还不够完美,因为顺序不是我期望的那样。
问题
是否真的有可能实现这一点并返回与使用 FULLTEXT 模式的 LIKE 相同的结果?如果是,如何?
谢谢!
最佳答案
如果您将列定义为使用将字符视为普通字母而非标点符号的排序规则,则只能索引标点符号。
有一个手册页显示了执行此操作的步骤:https://dev.mysql.com/doc/refman/8.0/en/full-text-adding-collation.html
但是既然你说你的脚本是硬编码的,我想你没有权限为你正在搜索的列重新定义排序规则,或者在安装自定义排序规则定义后重新启动 MySQL 服务器。
解决方法是搜索不带标点符号的单词,然后在找到匹配单词后添加要应用的条件。
SELECT *, MATCH(`i_desc`) AGAINST ('"test"' IN BOOLEAN MODE) AS RELEVANCE
FROM `ft_test`
WHERE MATCH(`i_desc`) AGAINST ('"test"' IN BOOLEAN MODE)
AND i_desc LIKE 'test+%';
ORDER BY RELEVANCE;
它将使用全文索引来查找与该词匹配的行,然后另一个条件项将针对那些具有带 +
的字符串的行(希望是小的)行进行过滤> 包括在内。
但同样,如果您无权更改 SQL 查询,这就没有意义了。
关于 bool 模式下的 MySQL FullText : searching keywords that contain '+' as part of the string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54818233/
import csv import numpy as np from sklearn.svm import SVR import matplotlib.pyplot as plt dates = []
我在 ANTLRWorks 1.4 中有以下语法。我正在考虑在文本冒险游戏创建器中实现解析器的想法,其中用户将为他的游戏指定各种允许的命令。 grammar test; parse :
我有一个 .dat 文件,我首先想将其转换为 .csv 文件,然后根据时间绘制一些行,我的脚本如下: import pandas as pd import numpy as np from sys i
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法 前言:
我有一个我无法理解的问题,因此在删除按钮中,尝试在创建按钮后将其删除的地方,出现以下错误: Delete=Button(root,text='Delete',command=lambda : S.pa
我想将某个函数作为线程运行,但我得到了 SyntaxError: non-keyword arg after keyword arg 我不明白为什么: #!/usr/bin/env python im
我试图在 scrappy 中抓取多个页面,我的函数确实返回第一个起始网址,但我无法设法使蜘蛛的规则生效。 这是我到目前为止所拥有的: import scrapy from scrapy.contrib
我正在使用 emeditor,我试图从法语维基百科转储 .xml 文件(20GB,3.38 亿行,总共 480 万篇文章)中分离出大约 200 万篇包含 keyword3 的文章。我想将文本包含在 2
发布表如下所示: publications ============ id title etc ... 关键字表如下所示: keywords ======== id name etc ... keyw
我有这个功能: def crypting(self, client, access_token, client_id, client_secret, oauth_scope, redirect_uri
我正在学习 Rails,但在以下代码中出现语法错误 unexpected keyword else, expected keyword end,我不知道为什么。
我正在一个网站上工作,我必须在数据库中搜索根域上/之后的字符串。我在文档中找不到任何有关它的信息。我正在尝试使其与 Iron Router 一起使用,但任何其他建议都会起作用。 感谢您的帮助! 编辑:
我刚刚找到有关 apache solr 的信息,并且在我成功安装了带有 Tomcat 的 apache Solr 之后。然后我开始使用 Apache Solr 进行搜索。 但我对 Apache Sol
我是 Angular JS 新手。我无法弄清楚过滤器如何仅对对象中的名称起作用,而不是对对象中的电话键起作用。就好像我们在 ng-model 中仅使用关键字一样,它将过滤范围中定义的对象中的名称和电话
当我运行以下代码行时,我试图将按钮按下绑定(bind)到 Tkinter 中的函数 get = Button(root, lambda: ChangeColour(boxes[1][2], boxes
response = requests.post("http://api.bf3stats.com/pc/player/", data = player, opt) 在 python IDLE 中运行
这是我正在操作的更新查询。此处错误“set data = :updateValue”,数据是 Dynamo DB 的保留关键字。我想我应该在这里使用 update ExpressionAttribut
根据维基百科,二元运算符 ?:是 colloquially referred to as the Elvis operator due to its resemblance to an emotico
我知道 AND 词定义了二进制 and ...但什么定义了逻辑and ? 最佳答案 同一个字,AND , 也用于逻辑与。但是这两个输入值要AND推荐为格式良好的标志 ; 真和 假 由两个值表示,位全部
反引号运算符的固定性是什么? 例如在 Real World Haskell 的这段代码中: ghci> (1+) `fmap` [1,2,3] ++ [4,5,6] [2,3,4,4,5,6] 很明显
我是一名优秀的程序员,十分优秀!