2015-08-18 4 views
0

Я новичок в Liferay и работаю над поиском Liferay. Я обнаружил, что не могу выполнять поиск пользователей при поиске по номеру телефона. я огляделся, но я нигде не нашел ответа. Не могли бы вы, ребята, помочь мне, как я могу это решить.Liferay поиск по номеру телефона

Я попробовал tutorial для поиска по названию работы.

Это работало, но я советую получить номер телефона для работы. Я работаю с Liferay 6.4.

+0

Поэтому я хочу добавить поиск номера телефона в портлете поиска. я узнал, что номер телефона не является индексом в searchindex. Я не знаю, так много о Liferay, но я уверен, что мне нужно индексировать номера телефонов, почти сравнимые с типом задания. Но я не могу найти, как это сделать. – Steven

+0

Как получить телефоны пользователя: http://www.liferay.com/community/forums/-/message_boards/message/105992 –

+0

Ty за то, что помог мне до сих пор. Это номер телефона по идентификатору пользователя. Я хочу поместить номер телефона в поисковую панель и вернуть список пользователей с этим номером телефона. Это вопрос, которого я не видел. – Steven

ответ

0

Следуя приведенному выше обсуждению, я вставляю немного нашего кода для вдохновения.

У нас было аналогичное требование: разрешить поиск в областях интересов пользователя/областях знаний, которые представляют собой пользовательскую структуру данных (например, теги), то есть не индексируются по умолчанию.

Во-первых, я определил новые text поля в Solr-х scheme.xml - их имена хранятся в постоянных AREAS_OF_EXPERTISE и AREAS_OF_INTEREST.

Тогда мы написали наш обычай IndexerPostProcessor и перекрываться в postProcessDocument и postProcessSearchQuery методы:

import com.liferay.portal.kernel.search.BaseIndexerPostProcessor; 
// other imports 

public class CustomUserIndexerPostProcessor extends BaseIndexerPostProcessor implements CustomeIndexerConstants { 

    private static Log log = LogFactoryUtil.getLog(CustomUserIndexerPostProcessor.class);  

    @Override 
    public void postProcessSearchQuery(BooleanQuery searchQuery, SearchContext searchContext) throws Exception { 
     searchQuery.addTerm(AREAS_OF_EXPERTISE, searchContext.getKeywords()); 
     searchQuery.addTerm(AREAS_OF_INTEREST, searchContext.getKeywords()); 
    } 

    @Override 
    public void postProcessDocument(Document document, Object obj) throws Exception { 
     addAreasOfExpertise(document); 
     addAreasOfInterest(document); 
    } 

    private void addAreasOfExpertise(Document document) throws NestableException { 
     long userID = GetterUtil.getLong(document.get(Field.ENTRY_CLASS_PK)); 
     AssetEntry expertiseEntry = AssetEntryLocalServiceUtil.fetchEntry(User.class.getName() + "#areasOfExpertise", userID); 
     String[] expertiseTags = new String[] {}; 
     if (expertiseEntry != null) { 
      expertiseTags = expertiseEntry.getTagNames(); 
     } 
     log.debug("Adding areas of expertise to user [" + document.get("fullName") + "]: " + StringUtil.merge(expertiseTags)); 
     document.addText(AREAS_OF_EXPERTISE, StringUtil.merge(expertiseTags, ", ")); 
    } 

    private void addAreasOfInterest(Document document) throws NestableException { 
     long userID = GetterUtil.getLong(document.get(Field.ENTRY_CLASS_PK)); 
     AssetEntry interestsEntry = AssetEntryLocalServiceUtil.fetchEntry(User.class.getName() + "#areasOfInterest", userID); 
     String[] interestsTags = new String[] {}; 
     if (interestsEntry != null) { 
      interestsTags = interestsEntry.getTagNames(); 
     } 
     log.debug("Adding areas of interest to user [" + document.get("fullName") + "]: " + StringUtil.merge(interestsTags)); 
     document.addText(AREAS_OF_INTEREST, StringUtil.merge(interestsTags, ", ")); 
    } 

} 

И последний шаг, чтобы добавить этот класс custopm постпроцессора в свой liferay-hook.xml:

<indexer-post-processor> 
    <indexer-class-name>com.liferay.portal.model.User</indexer-class-name> 
    <indexer-post-processor-impl>our.company.projectname.search.CustomUserIndexerPostProcessor</indexer-post-processor-impl> 
</indexer-post-processor> 

И вы готовы к развертыванию. Конечно, вы должны повторно проиндексировать весь контент портала после развертывания этого изменения (как описано в шаге 5 учебника).

Смежные вопросы