2014-12-23 3 views
0

Есть ли вероятность использования повышения полезной нагрузки, как описано here с FuzzyQuery? Или, может быть, можно предложить наилучшую стратегию для реализации гибридного поиска Fuzzy/Payload.Использование повышения полезной нагрузки с помощью FuzzyQuery в Lucene-4.x

В настоящее время у меня есть документы в индексе, в котором определенные части имеют более высокие приоритеты соответствия, используя технику, описанную в статье. Все идет хорошо, пока на сцену не выйдут нечеткие запросы.

Прямо сейчас я планирую как-то взломать код Lucene, чтобы иметь возможность корректировать термины с коэффициентом полезной нагрузки, например. в MultiTermQuery.TopTermsScoringBooleanQueryRewrite.addClause(). Однако я не уверен, что это лучший способ решить проблему.

Просьба предложить.

Возможно, a very similar question было предложено некоторое время назад, но не удовлетворительное решение.

ответ

1

У меня есть решение.

Вы должны использовать только PayloadTermQuery, но вы можете расширить свои жетоны с помощью уникального фильтра. С помощью этого уникального фильтра вы можете поместить новые упрощенные термины в цепочку токенов, я имею в виду, что ascii сложен, удаляет двойные буквы и т. Д. Используя PayloadTermQuery, вы также можете обесценить баллы для новых условий.

Для меня это решение работает нормально и очень быстро. Надеюсь, я смогу помочь.

Часть кода из моего решения:

private String simplifyingToken(String token) { 
    String token = H.foldToAscii(token); 
    if(!H.isNumber(token)){ 
     token = token.replaceAll("(.)\\1", "$1"); //double letters 
    } 
    token = token.replaceAll("\\-", ""); 
    token = token.replaceAll("(ou)", "u"); 
    token = token.replaceAll("(cz)", "c"); 
    token = token.replaceAll("w", "v"); 
    return simpleTokenJocker + token; //tf idf correction 
} 
+0

Ну, термин фильтры pertially решить эту проблему, но только тогда, когда мы можем выполнить один-к-одному преобразования. Когда нам нужно расширить, например, звездочка, простые фильтры без поиска в реальном индексе, подобном приведенному выше, приведут к экспоненциальному увеличению вариантов. Таким образом, мы должны повторно реализовать поиск индекса, чтобы имитировать фактическое поведение FuzzyQuery. – user3159253

+0

Я согласен с вами. Это простое решение, которое может помочь только в простых случаях. –

+0

К сожалению, мой случай не простой :) – user3159253