2015-11-01 2 views
0

Я ищу модуль сходства в Lucene (Java), который дает оценку на основе веса. Я знаю, что это расплывчато, лучше объяснить с помощью примера.Lucene custom сходство/оценка

Document 1 
----------- 
Firstname: Francesca 

Document 2 
----------- 
Firstname: Francisco 

В поле Имени анализируется с помощью Doublemetaphone & Рафинированного SOUNDEX фонетических алгоритмов. во время этапа индексации.

Таким образом, инвертированный индекс выглядит следующим образом (последние два термина дается Doublemetaphone и утонченный Soundex соответственно):

francesca ===> Doc1 
francisco ===> Doc2 
FRNS ===> Doc1, Doc2 
F29083030 ===> Doc1 
F2908306 ===> Doc2 

Теперь мой поисковый запрос выглядит следующим образом: Firstname: «Франческа»

Очевидно, что для Doc1 все 4 члена соответствуют. Для каждого матча я хочу дать процент от 25% (я заранее знаю, что для данного срока может быть максимум 4 расширенных условия.

Следуя этому принципу, я хочу дать следующую оценку :

Doc1 (100) [Reason: All 4 terms match] 
Doc2 (25) [Reason: Only FRNS term matches, rest don't match] 

Теперь мой вопрос здесь, чтобы достичь этого, есть ли модуль подобия доступен из полки Если нет, то я считаю, что я должен расширить DefaultSimilarity и переопределить необходимые методы Но где модуль?. который вызывает модуль подобия и суммирует все баллы по каждому документу? Причина, по которой я спрашиваю, я буду расширять этот балл в зависимости от веса для других полей. В этом случае общий балл на документ будет суммой средневзвешенного показателя для отдельных лиц ual поля. Поэтому я также должен настроить код, который суммирует количество отдельных полей и переопределяет его, чтобы найти среднее значение. Может кто-нибудь показать некоторые указатели, пожалуйста? Благодарю.

ответ

0

Хорошее место, чтобы начать этот проект будет Йорг Prante - https://github.com/jprante/elasticsearch-payload

Наряду с другими проектами, он также расширил модуль подобия.

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

В следующем файле - https://github.com/jprante/elasticsearch-payload/blob/master/src/main/java/org/xbib/elasticsearch/payload/PayloadPlugin.java

Вы можете увидеть следующий пример кода о том, как добавить модуль подобия.

public void onModule(SimilarityModule module) { 
    module.addSimilarity("payload_similarity", PayloadSimilarityProvider.class); 
} 
+0

Благодарим за это. Но то, что я также рассматриваю, - это класс, который мне нужно переопределить, чтобы усреднить отдельные баллы (за поле). – user1189332

+0

Обновленный ответ. –