Совпадение не удается, потому что fuzzy searches
равны term level queries
, что означает, что строка запроса не будет проанализирована , в то время как данные, которые были проиндексированы, я предполагаю, если тип text
с standard analyzer
, будетпреобразовать в svxgbckpyz в инвертированном индексе.
Вместо этого можно реализовать fuzziness
с помощью запроса match
, как показано ниже:
POST testindex/_search
{
"query":{
"match":{
"firstname":{
"query":"sVxGBCkPYZ",
"fuzziness":"AUTO"
}
}
}
}
Вы можете изменить значение с AUTO
на 2
или 3
в зависимости отваш вариант использования.
Упомянутое вами совпадение exact
также работает, потому что строка запроса будет проанализирована и преобразует входную строку в нижний регистр, который доступен в инвертированном индексе.
Что касается того, как нечеткий запрос (который вы упомянули) работает за сценой, в соответствии с этим LINK , выглядит следующим образом:
Нечеткий запросработает, беря оригинальный термин и создавая автомат Левенштейна - как большой граф, представляющий все строки, которые находятся в пределах указанного расстояния редактирования исходной строки.
Затем нечеткий запрос использует автомат для эффективного обхода всехтерминов в словаре терминов, чтобы увидеть, если они совпадают.Как только он соберет все соответствующие термины, которые существуют в словаре терминов, он может вычислить список подходящих документов.
Конечно, в зависимости от типа данных, хранящихся в индексе, нечеткий запрос срасстояние редактирования 2 может соответствовать очень большому числу терминов и работать очень плохо.
Обратите особое внимание на это утверждение: representing all the strings that are within the specified edit distance of the original string
Например, для некоторых слов с расстоянием1 для life
будет aife, bife, cife, dife....lifz
.
Так что в вашем случае автомат нечеткого поиска не сможет создать термин svxgbckpyz
из входной строки sVxGBCkPYZ
во-первых, потому что расстояние между ними равно 7 (Помните, что расстояние между 1 A
и a
) равно 1, что, я не думаю, может создать опция AUTO
, и даже если вы настроите ее на 7
, она может не создавать строку, поскольку будет огромный список словс расстоянием 7
Добавление еще одного LINK для получения дополнительной информации.Надеюсь, поможет!