ElasticSearch: минимальный_шаблон_длина и длина списка терминов

Используя ElasticSearch, я пытаюсь использовать minimum_should_match вариант на Terms Query чтобы найти документы, которые имеют список longс это X% похож на список longs Я спрашиваю с.

например:

{
    "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 в конце, пока запрос содержал 13 и второй документ содержал 11 где снова запрос содержал 13,

Это означает, что 1 из 10 чисел в списке моего запроса отличается в возвращаемом документе и соответствует разрешенному 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]

0 ответов

Другие вопросы по тегам