1

使用 ElasticSearch 我正在尝试使用minimum_should_matcha 上的选项Terms Query来查找具有类似于我正在查询的 s 列表的longs列表的文档。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并且第二个文档包含一个11where 查询又包含 a 13

这意味着我的查询列表中的 10 个数字中有 1 个在返回的文档中是不同的,并且等于查询中允许的90%相似度 ( minimum_should_match) 值。

现在我遇到的问题是,我希望行为有所不同,因为第二个文档更长并且有 11 个数字而不是 10,因此理想情况下差异级别应该更高,因为它实际上有两个值1112不在查询列表中。例如:

而不是计算以下的交集:

(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]
4

0 回答 0