是否有可能为两个恒定(相同)样本获得“理想的”全文相关性?

时间:2016-11-25 10:17:53

标签: mysql

全文MATCH为索引表中的所有记录提供相对相关性。但是,我根据测试样本和常量样本(我比较的)之间的相似性水平(假设< 70%不足以将其视为匹配)做出决定。

之前我使用Levenshtein Distance来获得两个样本相似的百分比系数。但是这种方法对我的数据集表现得非常低效。

我想做的是获得与自身匹配的样本的相关系数,将其视为100%相关性

我尝试了类似的查询:

SELECT
    samples.`name`,
    MATCH(samples.`name`)
        AGAINST ('Constant sample' IN NATURAL LANGUAGE MODE),
    MATCH (perfectSample.sample)
        AGAINST ('Constant sample' IN NATURAL LANGUAGE MODE)
FROM
    samples,
    (SELECT 'Constant sample' as sample) as perfectSample

但是embedded from不支持全文匹配(我的想法是:因为MyISAM表必须没有FULLTEXT索引,所以可以通过这种方式实现它。)

所以实际问题是:是否有可能获得2个常数值的FULLTEXT相关性?

1 个答案:

答案 0 :(得分:0)

好的,所以这就是我设法做的。也许有人会使用它。 首先,应将示例插入到InnoDB(重要)表中,该表在必须为FULLTEXT的字段上具有MATCH索引

在此之后,有必要获取将与之比较的所有值(样本)。

SELECT * FROM samples

接下来,这些获取的字段需要MATCH对自己。最好放置一个WHERE子句,使一个字段与其他任何字段都不匹配。

SELECT
    samples.value,
    MATCH (samples.value) AGAINST (:fetchedVal)
WHERE samples.value = :fetchedVal

这将为每个样本AGAINST本身提供相关性。

注意:使用InnoDB非常重要,因为只有一行的MyISAM MATCH会产生无效的结果。例如:相同的查询可以生成相关性值40.1511 for InnoDB3 for MyISAM。 这是由于如何计算单词唯一性的方式。您可以阅读有关此here

的更多信息

就是这样。第二个查询将给出(在我看来)100%的相关性,可用于确定此样本与其他样本之间的相似性水平

这有点脏,但这是唯一对我有用的选择。由于没有人提出任何其他建议(更好),我会将此作为答案,直到找到更好的解决方案