在SearchFilterQueryData中使用OR运算符构建SOLR过滤器查询

2020-09-05 00:54发布

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

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


专家们,

在CategoryPageController中搜索期间,我试图修改SOLR查询并添加一些过滤器参数(大约4个过滤器参数)和类似示例:

 最终SearchFilterQueryData searchNameFilterQuery = new SearchFilterQueryData();
  searchNameFilterQuery.setKey(" name");
  searchNameFilterQuery.setValues(new HashSet <>
    (Collections.singletonList(queryData.get(" name")))));
  searchNameFilterQuery.setOperator(FilterQueryOperator.OR);

  

并将其添加到this.searchQueryData.setFilterQueries列表中。

现在正在形成查询,

yq = :&q = {!boost}(%2B {!lucene + v%3D $ yq})&fq = allCategories_string_mv:1&fq = gskProductAvailability_string_mv:ACTIVE&fq = code_string:ACLOV&fq = name_usecscontexttext_zh_CN :ACLOV&fq = productIdentifier_text_mv:ACLOV

因此,当前查询为每个要搜索的属性添加一个 fq 参数,但是我想在此处使用OR条件,例如fq =(gskProductAvailability_string_mv:ACTIVE OR code_string:ACLOV OR name_usecscontext_en_us_text:ACLOV OR productIdentifier_text_mv:ACLOV

如何通过SearchFilterQueryData或类似功能启用此功能? 有人遇到过类似的事情吗?

关于病毒,

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

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


专家们,

在CategoryPageController中搜索期间,我试图修改SOLR查询并添加一些过滤器参数(大约4个过滤器参数)和类似示例:

 最终SearchFilterQueryData searchNameFilterQuery = new SearchFilterQueryData();
  searchNameFilterQuery.setKey(" name");
  searchNameFilterQuery.setValues(new HashSet <>
    (Collections.singletonList(queryData.get(" name")))));
  searchNameFilterQuery.setOperator(FilterQueryOperator.OR);

  

并将其添加到this.searchQueryData.setFilterQueries列表中。

现在正在形成查询,

yq = :&q = {!boost}(%2B {!lucene + v%3D $ yq})&fq = allCategories_string_mv:1&fq = gskProductAvailability_string_mv:ACTIVE&fq = code_string:ACLOV&fq = name_usecscontexttext_zh_CN :ACLOV&fq = productIdentifier_text_mv:ACLOV

因此,当前查询为每个要搜索的属性添加一个 fq 参数,但是我想在此处使用OR条件,例如fq =(gskProductAvailability_string_mv:ACTIVE OR code_string:ACLOV OR name_usecscontext_en_us_text:ACLOV OR productIdentifier_text_mv:ACLOV

如何通过SearchFilterQueryData或类似功能启用此功能? 有人遇到过类似的事情吗?

关于病毒,

付费偷看设置
发送
6条回答
Cikesha
1楼-- · 2020-09-05 01:04

您好,您可以使用SolrQuery对象而非开箱即用的类Hybris进行此操作。 Solr提供了此功能,因此您必须直接将这些条件设置为SolrQuery类。 我可以为您提供方法。

假设您使用的是6.x

  • 步骤1-扩展DefaultFacetSearchStrategy/AbstractFacetSearchStrategy并覆盖

  • 步骤2-覆盖公共SearchResult search()。

  • 步骤3-这里的SolrQuery对象可用。

  • 步骤4-solrQuery.addFilterQuery(" gskProductAvailability_string_mv:ACTIVE或code_string:ACLOV或name_usecscontext_en_us_text:ACLOV或productIdentifier_text_mv:ACLOV")

这将起作用。 让我知道是否有帮助。

compass1988
2楼-- · 2020-09-05 01:04

有多种解决方法,

  • Complex是要创建新bean并将其添加到现有流中,例如在DefaultSolrSearchFacade,DefaultSolrSearchService,* Search * Query * Converter,Populator,SearchQuery中。

  • 您可以将其填充为SearchFilterQueryData并在FacetSearchStrategy中应用(如果不是),并从SearchQuery表单中删除您在SearchFilterQueryData中添加的内容。

  • 最简单的方法,但要谨慎使用,在会话中设置所有列表并在此处获取。

Baoming ROSE
3楼-- · 2020-09-05 01:11

嗨,病毒,

您可以通过使用在类别顶部应用类别过滤器的自由文本搜索来进行另一种操作

悠然的二货
4楼-- · 2020-09-05 01:08

Vinay,尝试了此操作,但是似乎不起作用。

绿领巾童鞋
5楼-- · 2020-09-05 01:25

您好,Viral,您可以通过扩展现有的SearchFilterPopulator来实现。 在那里,您将获得SearchQuery对象,以添加过滤器查询并设置运算符。

樱桃小丸子0093
6楼-- · 2020-09-05 01:13

嗨Namrata,

感谢您的答复,我通过实现FacetSearchListener并使用Raw Query(而不是使用FilterQuery或填充它)来操纵SearchQuery,从而实现了这一目标。

关于病毒

一周热门 更多>