Sample program to extract did you mean tokens from navigation query result. This program is tested against the Oracle Endeca Discover Electronics application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
package com.ourownjava.endeca.presentation; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.endeca.navigation.DimValIdList; import com.endeca.navigation.ENEConnection; import com.endeca.navigation.ENEQuery; import com.endeca.navigation.ENEQueryException; import com.endeca.navigation.ERecSearch; import com.endeca.navigation.ERecSearchList; import com.endeca.navigation.ESearchDYMSuggestion; import com.endeca.navigation.ESearchReport; import com.endeca.navigation.HttpENEConnection; import com.endeca.navigation.Navigation; /** * How to extract did you mean tokens from Navigation Query Result. * * @author ourownjava.com * */ @SuppressWarnings({ "unchecked" }) public class NavigationQueryDidYouMean { private static final String MDEX_HOST = "localhost"; private static final Integer MDEX_PORT = 15000; /** * This method shall fire the given query against the MDEX. * * @param eneQuery * @return * @throws ENEQueryException */ public Navigation serach(final String searchString) throws ENEQueryException{ return createConnection().query(createKeywordQuery(searchString)).getNavigation(); } /** * Get the did you mean suggestions from the navigation search result. * * @return */ public List<String> getDidYouMeanTokens(final Navigation navigation){ final List<String> tokens = new ArrayList<String>(); final Map<String, List<ESearchReport>> searchReportMap = navigation.getESearchReportsComplete(); for(String key : searchReportMap.keySet()){ final List<ESearchReport> searchReports = searchReportMap.get(key); for(final ESearchReport searchReport : searchReports){ final List<ESearchDYMSuggestion> eSearchDYMSuggestions = searchReport.getDYMSuggestions(); for(ESearchDYMSuggestion eSearchDYMSuggestion : eSearchDYMSuggestions){ tokens.add(eSearchDYMSuggestion.getTerms()); } } } return tokens; } /** * This method shall create an ENEQuery. * * @param searchString * @return */ private static ENEQuery createKeywordQuery(final String searchString) { final ENEQuery query = new ENEQuery(); query.setNavERecSearchDidYouMean(true); final DimValIdList dimValIdList = new DimValIdList("0"); query.setNavDescriptors(dimValIdList); final ERecSearchList searches = new ERecSearchList(); final ERecSearch eRecSearch = new ERecSearch("All", searchString); searches.add(eRecSearch); query.setNavERecSearches(searches); return query; } /** * @return */ private static ENEConnection createConnection() { return new HttpENEConnection(MDEX_HOST, MDEX_PORT); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package com.ourownjava.endeca.presentation; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Before; import org.junit.Test; import com.endeca.navigation.ENEQueryException; import com.endeca.navigation.Navigation; /** * This program is tested against the Oracle Endeca Discover Electronics reference application. * * @author ourownjava.com * */ public class NavigationQueryDidYouMeanBehavior { private NavigationQueryDidYouMean navigationQueryDidYouMean; @Before public void setUp(){ navigationQueryDidYouMean = new NavigationQueryDidYouMean(); } @Test public void shouldExtractTheDidYouMeanTokens() throws ENEQueryException{ final Navigation navigation = navigationQueryDidYouMean.serach("out door"); final List<String> didYouMeanTokens = navigationQueryDidYouMean.getDidYouMeanTokens(navigation); assertTrue(didYouMeanTokens.size() > 0); assertEquals("outdoor", didYouMeanTokens.get(0)); } } |