使用 ElasticSearch 我正在尝试使用minimum_should_match
a 上的选项Terms Query
来查找具有类似于我正在查询的 s 列表的long
s列表的文档。X%
long
例如:
{
"filter": {
"fquery": {
"query": {
"terms": {
"mynum": [1, 2, 3, 4, 5, 6, 7, 8, 9, 13],
"minimum_should_match": "90%",
"disable_coord": False
}
}
}
}
}
将匹配两个文档与以下mynum
列表:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
和:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12]
这是有效的并且是正确的,因为第一个文档10
末尾有 a 而查询包含 a13
并且第二个文档包含一个11
where 查询又包含 a 13
。
这意味着我的查询列表中的 10 个数字中有 1 个在返回的文档中是不同的,并且等于查询中允许的90%
相似度 ( minimum_should_match
) 值。
现在我遇到的问题是,我希望行为有所不同,因为第二个文档更长并且有 11 个数字而不是 10,因此理想情况下差异级别应该更高,因为它实际上有两个值11
和12
不在查询列表中。例如:
而不是计算以下的交集:
(list1) [1, 2, 3, 4, 5, 6, 7, 8, 9, 13]
和:
(list2) [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12]
这是一个10%
区别
应该说,因为list2
比 长list1
,所以交点应该是:
(list2) [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12]
和:
(list1) [1, 2, 3, 4, 5, 6, 7, 8, 9, 13]
这是一个12%
区别
- 这可能吗 ?
- 如果不是,除了使用密集向量而不是稀疏向量之外,我如何加权列表的长度?例如:
使用
[1, 2, 3, 4, 5, 6, 7, 8, 9, , , , 13]
而不是:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 13]