自定义自动提示

2020-09-14 18:46发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我需要如下自定义自动建议:-

搜索框组件中的搜索词应与产品名称/说明匹配,并且匹配产品的所有相关类别均应显示为自动提示。

开箱即用的Hybris将搜索词与类别名称匹配。

谢谢,SPS。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我需要如下自定义自动建议:-

搜索框组件中的搜索词应与产品名称/说明匹配,并且匹配产品的所有相关类别均应显示为自动提示。

开箱即用的Hybris将搜索词与类别名称匹配。

谢谢,SPS。

付费偷看设置
发送
8条回答
Nir深蓝
1楼 · 2020-09-14 18:52.采纳回答
  @ResponseBody
      @RequestMapping(value ="/img/autocomplete",方法= RequestMethod.GET)
      公共AutocompleteResultData getAutocompleteSuggestions(@RequestParam(" term")最终String术语)
      {
          最终List 项=新的ArrayList ();
          布尔值addFacet = true;
          最终的AutocompleteResultData resultData = new AutocompleteResultData();
          最终List  autocompleteSuggestionData = productSearchFacade.getAutocompleteSuggestions(term);
          用于(最终AutocompleteSuggestionData termData:autocompleteSuggestionData)
          {
              terms.add(termData.getTerm());
              如果(addFacet)
              {
                  addFacet = false;
                  最终FacetSearchPageData  searchPageData = commerceProductSearchService
                          .textSearch(term,null);
 
                  最终List >构面= searchPageData.getFacets();
 
                  用于(最终FacetData  facetData:facets)
                  {
                      如果(CATEGORY_FACET_NAME.equalsIgnoreCase(facetData.getName()))
                      {
                          resultData.setCategoryResults(getCategories(facetData,term));
                      }
                  }
                  resultData.setProductCount(searchPageData.getPagination()。getTotalNumberOfResults());
              }
          }
          最终List 产品= productSearchFacade.textSearch(term).getResults();
          如果(CollectionUtils.isNotEmpty(products))
          {
              resultData.setProducts(sublist(products));
          }
          resultData.setSuggestions(terms);
          resultData.setOriginalTerm(term);
          返回resultData;
      }


  私有List  getCategories(最终FacetData  facetData,最后的String项)
      {
          最终的List 类别=新的ArrayList <>();
          用于(最终FacetValueData  facetValueData:facetData.getTopValues())
          {
              最终的CategoryData数据= new CategoryData();
              data.setCode(facetValueData.getCode());
              data.setName(facetValueData.getName());
             //这很丑陋,但我们必须以这样一种方式来生成查询URL,即它是所选文本和所单击类别之间的AND。
             //%3A是`:`的URL编码值
              最终字符串categoryUrl = Config.getParameter(" website.url.https")+"/img/search?q =" +条款
                      +"%3Arelevance%3Acategories%3A" + facetValueData.getCode();
 
              data.setUrl(categoryUrl);
              最终的CategoryResultData categoryResultData =新的CategoryResultData();
              categoryResultData.setCategory(data);
              categoryResultData.setCount(facetValueData.getCount());
              Categories.add(categoryResultData);
          }
          返回类别;
      }
  
CJones
2楼-- · 2020-09-14 19:14

@sps您是否要搜索"衬衫",而您想获得在产品名称,描述和类别名称中具有相同"衬衫"字样的产品?

这是您的要求吗? 让我知道

Climb_Ma
3楼-- · 2020-09-14 18:56

你好,

即使我也在寻找相同的东西! 因此,请找到一些我认为可能有用的细节。

  1. 在SearchPageController中,有一个名为getAutocompleteSuggestions的方法。

  2. 在对它们进行调试之后,您将到达DefaultSolrAutoSuggestService.getAutoSuggestionsForQuery方法,该方法在内部形成Solr查询并使用SolrJ对Solr Server进行Web服务调用。 其中返回信息。

  3. 在SolrConfig.xml中,转到requestHandler/suggest,将相应searchComponent上的算法更改为FuzzyLookUp。 另外,您可能需要在schema.xml中的自动建议中将tokenizer更改为KeywordTokenizer

天桥码农
4楼-- · 2020-09-14 18:55

嗨,苏拉卜,

请解释哪个类用于CommerceProductSearchService,以便我可以在控制器中引用相同的类。

和常量CATEGORY_FACET_NAME的值。

当学会了学习
5楼-- · 2020-09-14 19:10

您好@sps:请点击我解释了solr工作原理的链接。 如果您希望solr文本搜索仅查看产品名称/说明。 然后,将这两个字段设置为文本,其余字段设置为字符串或双精度。

https://answers.sap.com/questions/12769324/customizing-autosuggestion-in-searchbox-to-show-pr.html?childToView=12802332#answer-12802332

因此,solr将仅使用产品名称/说明来制作令牌。 搜索时,将根据与产品名称/描述相匹配的搜索输入来获得结果。

获得搜索结果时,请从结果集中确定所有类别并显示给用户。 在这里查看工作示例: https://www.bestandless.com.au/

转到上面的URL并搜索女士连衣裙

me_for_i
6楼-- · 2020-09-14 19:05

模糊搜索是非常昂贵的操作。 在下面看到一个很好的答案 https://stackoverflow.com/questions/10880976/solr-lucene-fuzzy-search- 太慢了

不会是良好的用户体验。

  • 更改/suggest上的算法不会有任何区别,因为solr建议使用/spellcheck端点。 因此,如果您想调整令牌生成器,请在/spellcheck上进行。

我是小鹏鹏啊
7楼-- · 2020-09-14 19:09

感谢Saurabh,我看到在DefaultSolrProductSearchFacade.java中,我们有方法textSearch,该方法返回ProductSearchPageData。

我不确定应该在哪里进行定制以获取产品的类别。 任何指针都会有所帮助。

一周热门 更多>