全文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
相关性?
答案 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 InnoDB
和3 for MyISAM
。
这是由于如何计算单词唯一性的方式。您可以阅读有关此here
就是这样。第二个查询将给出(在我看来)100%的相关性,可用于确定此样本与其他样本之间的相似性水平
这有点脏,但这是唯一对我有用的选择。由于没有人提出任何其他建议(更好),我会将此作为答案,直到找到更好的解决方案