加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

智能提示(三)facet 聚合属性(类别、标签)提示

发布时间:2020-12-13 22:13:26 所属栏目:百科 来源:网络整理
导读:大概需求,solr实现以下类似京东的智能提示功能的方案,带有标签值、或者分类和短语的: 京东: 淘宝: 简单分析上图,在输入关键字部分商品含有特殊属性,分类,标签的时候 就给输入关键字提示 的下一个层级展示该标签。 用过solr的朋友,看到这个 全球购

大概需求,solr实现以下类似京东的智能提示功能的方案,带有标签值、或者分类和短语的:

京东:


淘宝:



简单分析上图,在输入关键字部分商品含有特殊属性,分类,标签的时候 就给输入关键字提示 的下一个层级展示该标签。

用过solr的朋友,看到这个 全球购 第一时间会想到facet。

大概思路:

存储的时候,把相关的标签值、属性值、分类值和商品名称等信息(简称为商品画像) 存储到一个多值域xxx_field中。 理想切词状态下,切出 类似 以上 词(类似:笔记本电

脑超薄本,衣服 夏天 热卖,等)。

查询的时候,采用solr的faect前缀匹配和pivot机制查询。facet.prefix、facet.pivot,piovt 的用法个人理解就是就是按照多个维度进行分组查询,把多次faect查询集合成一次。


demo: 参考:http://mall.crecgec.com/,实现了聚合物品所在分类。



参考词干分词器:

KeywordTokenizerFactory:这个分词器不进行任何分词!整个字符流变为单个词元。String域类型也有类似的效果,但是它不能配置文本分析的其它处理组件,比如大小写转

换。任何用于排序和大部分Faceting功能的索引域,这个索引域只有能一个原始域值中的一个词元。

	<!-- 词干分词器 -->
 	<fieldType name="suggest_text" class="solr.TextField" positionIncrementGap="100" >
	     <analyzer>
		   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
		   <filter class="solr.KeywordRepeatFilterFactory"/>
		   <filter class="solr.PorterStemFilterFactory"/>
 		   <filter class="solr.LowerCaseFilterFactory" />
 		   <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
		 </analyzer>
    </fieldType> 
    
    	<!-- 搜索建议分词 -->
	<fieldType name="Word_text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
	    <analyzer type="index">
            <!-- 不管什么内容,整句当成一个关键字 -->
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <!-- 同义词 -->
            <filter class="solr.SynonymFilterFactory"   synonyms="synonyms.txt"    ignoreCase="true"     expand="true" />
            <!-- 停止词 -->
            <filter class="solr.StopFilterFactory"    ignoreCase="true"   words="stopword.dic"    enablePositionIncrements="true" />
            <!-- 小写过滤 -->
            <filter class="solr.LowerCaseFilterFactory" />
            <!-- 关键字 -->
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
            <!-- 拆字 -->
            <filter class="solr.WordDelimiterFilterFactory"
				generateWordParts="1" generateNumberParts="1" catenateWords="1"
				catenateNumbers="1" catenateAll="0" />
			<!-- 词干抽取算法 -->
			<filter class="solr.PorterStemFilterFactory"/>
	    </analyzer>
	    <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <filter class="solr.StopFilterFactory"    ignoreCase="true"   words="stopword.dic"    enablePositionIncrements="true" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
            <filter class="solr.WordDelimiterFilterFactory"
				generateWordParts="1" generateNumberParts="1" catenateWords="0"
				catenateNumbers="0" catenateAll="0" />
				<!-- 词干抽取算法 -->
			<filter class="solr.PorterStemFilterFactory"/>
			<!-- 去除重复词 -->
			<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
	    </analyzer>
    </fieldType>

简单solrj代码:
	//设置查询参数  
        SolrQuery query=new SolrQuery();  
        query.setParam("q","*:*");	
        query.setStart(0);
        query.setRows(0);
        query.setParam("facet.pivot","suggest,cate_id_3");
        query.setParam("f.suggest.facet.prefix",map.get("word").toString());
        query.setRequestHandler("/suggestFacet");
        QueryResponse rsp= server.query(query);  
        NamedList<List<PivotField>> namedList=rsp.getFacetPivot();   

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读