Я ищу пушисто для имени и фамилии в Lucene (с расстоянием levenshtein 2 каждый) во входной строке/документе с использованием нечетких запросов.Объединение запросов нечетких и spanNear в Lucene
Я ожидаю, что эти два члена будут находиться в непосредственной близости друг от друга (в этом примере, разделенном не более чем на 3 члена), используя SpanNearQuery. Я также не хочу, чтобы порядок имел значение.
Мой код для создания запроса:
FuzzyQuery firstNameQuery = new FuzzyQuery(new Term("text", firstName), 2);
FuzzyQuery lastNameQuery = new FuzzyQuery(new Term("text", lastName), 2);
SpanQuery[] clauses = new SpanQuery[] {
new SpanMultiTermQueryWrapper<MultiTermQuery>(firstNameQuery),
new SpanMultiTermQueryWrapper<MultiTermQuery>(lastNameQuery)
};
SpanNearQuery spanNearQuery = new SpanNearQuery(clauses, 3, false);
То, что я вижу сейчас в моем тестовом модуле является то, что члены с levenshstein расстоянием 1, кажется, работает, так что «Джон Doa», «Джон Dox», и т.д. будет соответствовать «John Doe», но расстояние levenshstein 2 не будет, например «Джонни Доу» не будет соответствовать.
Длина пролета работает нормально, у меня может быть до трех терминов между именами и фамилиями.
Может кто-нибудь просветить меня о том, что я делаю неправильно?
Update 1
К сожалению, я испортил пример, который я изловчился здесь и не использовать реальные данные по причинам конфиденциальности.
Что я вижу, так это то, что запрос не работает вообще так, как я себе представлял.
Строка ввода: "Пациент: John Doe" запроса: spanNear ([SpanMultiTermQueryWrapper (текст: John ~ 2), SpanMultiTermQueryWrapper (текст: Doe ~ 2)], 3, ложные)
Это не создает хит, хотя условия должны точно совпадать (расстояние редактирования 0).
Расстояние между «John» и «Johnnie» равно 3. – femtoRgon
Извините, я испортил пример и обновил вопрос. Не могли бы вы снова взглянуть? –
Вы использовали Java-версию Lucene? Это похоже на C#, но в Lucene.Net нет (больше) SpanMultiTermQueryWrapper. Или вы можете указать мне где-нибудь там, где я могу получить версии Lucene.Net, где это было все еще, потому что spceific класс находится в базе кода в GitHub ... –