ElasticSearch: минимальный_шаблон_длина и длина списка терминов
Используя ElasticSearch, я пытаюсь использовать minimum_should_match
вариант на Terms Query
чтобы найти документы, которые имеют список long
с это X%
похож на список long
s Я спрашиваю с.
например:
{
"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]