Я пытаюсь написать модульные тесты для нечеткого соответствия в моем проекте. Тем не менее, у меня есть один тест, который не проходит, хотя он не должен в соответствии с документацией Lucene. Поисковый термин имеет длину 2 символа, индексированный термин имеет длину 3 символа, а расстояние редактирования равно 2. Согласно документации lucene, этот поисковый термин не должен совпадать с этим индексированным термином, поскольку расстояние редактирования должно быть> длиной наименьшего соответствующего термина.
Поисковый термин "je", индексированный термин "jon". Согласно расстоянию Дамаро Левенштейна, которое используется Lucene, расстояние редактирования здесь равно 2. Согласно официальной документации Lucene по FuzzyQuery (https://lucene.apache.org/core/8_1_0/core/org/apache/lucene/search/FuzzyQuery.html), расстояние редактирования должно быть больше, чем длина самого короткого термина (поисковый запрос илииндексируемый термин). Поэтому по этой логике мой поисковый запрос «je» не должен совпадать с «jon».
В качестве фона я использую логический запрос с prefixQuery и fuzzyQuery. Частичное совпадение включено с помощьюprefixQuery и нечеткое сопоставление с fuzzyQuery. Я не храню ни грамматических выражений, ни слова-основы. Я использую простой стандартный анализатор для индексации и поиска.
Наконец, я распечатал оценку объяснения для этого результата поиска иПохоже, что объяснение подтвердило мою обеспокоенность тем, что это может быть ошибкой в Lucene. Выход для метода объяснения:
"0.0 = сумма: 0.0 = ConstantScore (имя: jon) ^ 0.0"
Это показывает, что рассчитанный показатель релевантности равен 0, но результат совпадаетредактировал и возвращал.
Есть ли какие-либо проблемы с неправильной документацией Lucene или ошибки в программном обеспечении?