草庐IT

mysql - 是否可以计算每行与 MATCH AGAINST 匹配的单词数

coder 2023-10-05 原文

直接在mysql查询可以吗? 示例:

以 bool 模式搜索+possible +know

“我想知道这怎么可能”=> 2 场比赛

“一切皆有可能”=> 1 场比赛

最佳答案

UPDATE 我把我原来的答案下移了

我有一个奇怪的建议

您可能需要使用名为 myisam_ftdump 的 mysql 实用程序

这是我原始答案中样本的全文转储

C:\MySQL_5.5.12\data\sandro>myisam_ftdump -vc txtdata 1
        2            0.4054651 everyhing
        2            0.4054651 impossible
        1            1.3862944 knew
        3           -0.4054651 know
        2            0.4054651 nothing
        1            1.3862944 people
        2            0.4054651 possible
        1            1.3862944 probable
        1            1.3862944 something

如果您可以将其生成为文本文件,则可以让 PHP 解析它以查找您要查找的词。

原始答案

有或没有 BOOLEAN MODE,答案是否定的。

但是,您可以显示基于单词出现次数和整个字符串长度的排名,如下所示:

样本数据

DROP DATABASE sandro;
CREATE DATABASE sandro;
use sandro
CREATE TABLE txtdata
(
    id int not null auto_increment,
    txt VARCHAR(255),
    primary key (id),
    FULLTEXT (txt)
) ENGINE=MyISAM;
INSERT INTO txtdata (txt) VALUES
('I know Nothing is possible'),
('We know nothing is impossible'),
('I knew everyhing is possible'),
('We know everyhing is possible'),
('For may people something is probable');

这里是各种搜索排名的结果

mysql> SELECT *,MATCH(txt) AGAINST ('possible knew') as score FROM txtdata;
+----+--------------------------------------+--------------------+
| id | txt                                  | score              |
+----+--------------------------------------+--------------------+
|  1 | I know Nothing is possible           | 0.3919430673122406 |
|  2 | We know nothing is impossible        |                  0 |
|  3 | I knew everyhing is possible         |   1.73200523853302 |
|  4 | We know everyhing is impossible      |                  0 |
|  5 | For may people something is probable |                  0 |
+----+--------------------------------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT *,MATCH(txt) AGAINST ('possible know') as score FROM txtdata;
+----+--------------------------------------+--------------------+
| id | txt                                  | score              |
+----+--------------------------------------+--------------------+
|  1 | I know Nothing is possible           | 0.3919430673122406 |
|  2 | We know nothing is impossible        |                  0 |
|  3 | I knew everyhing is possible         | 0.3919430673122406 |
|  4 | We know everyhing is impossible      |                  0 |
|  5 | For may people something is probable |                  0 |
+----+--------------------------------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT *,MATCH(txt) AGAINST ('impossible knew') as score FROM txtdata;
+----+--------------------------------------+--------------------+
| id | txt                                  | score              |
+----+--------------------------------------+--------------------+
|  1 | I know Nothing is possible           |                  0 |
|  2 | We know nothing is impossible        | 0.3919430673122406 |
|  3 | I knew everyhing is possible         |  1.340062141418457 |
|  4 | We know everyhing is impossible      | 0.3919430673122406 |
|  5 | For may people something is probable |                  0 |
+----+--------------------------------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT *,MATCH(txt) AGAINST ('impossible know') as score FROM txtdata;
+----+--------------------------------------+--------------------+
| id | txt                                  | score              |
+----+--------------------------------------+--------------------+
|  1 | I know Nothing is possible           |                  0 |
|  2 | We know nothing is impossible        | 0.3919430673122406 |
|  3 | I knew everyhing is possible         |                  0 |
|  4 | We know everyhing is impossible      | 0.3919430673122406 |
|  5 | For may people something is probable |                  0 |
+----+--------------------------------------+--------------------+
5 rows in set (0.00 sec)

mysql>

关于mysql - 是否可以计算每行与 MATCH AGAINST 匹配的单词数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046628/

有关mysql - 是否可以计算每行与 MATCH AGAINST 匹配的单词数的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  6. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  9. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  10. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

随机推荐