• solr6.3根据搜索关键词词频(关键词出现次数、关键词highlight)进行排序


    http://localhost:8080/solr/test/select?fq=product_name:大有&indent=on&q=product_name:大有电钻 OR raws_title:大有电钻&rows=45&wt=json

    使用q进行分别进行两个字段查询,得出的结果有很多,包括很其他品牌的商品:博世、喜利得、林君等各类品牌的“电钻”。如果需要进行精准的品牌查询,那就需要建立一个品牌词词库,也是通过slor进行code添加一套,然后在solrj进行编写逻辑,把拆词的内容到品牌词库再搜索一次,如果包含则说明用户输入了指定的品牌商品。【有空补上代码】

    然后把得出来的品牌词,通过fq进行过滤筛选,得出的内容将会是该商品的所有相关品牌。

    目前的情况是:有一些商品的排序太靠后面了,需求是:能否根据“电钻”的出现次数进行排序靠前处理。

    整个国内对于solr的支持太少了,动不动就收费,收费给出来的结论也是大忽悠,看好了,要开始车了。

    首先我们要掌握“termfreq”函数,这个是solr已实现的方法,使用如:termfreq(raws_title,*电钻*)

    termfreq("字段","词频搜索的关键词"),得出的结果是:

    根据这个,我们可以把这个函数放到sort进行排序。在sort中填写:termfreq(raws_title,*电钻*) desc

    如图,这样就实现了solr根据搜索关键词的词频或出现次数进行排序了。

    【注意】我们可以根据这个原理进行复杂的得分计算,例如product_name出现“电钻”得分会更高,可以结合Solr的函数查询(FunctionQuery)进行实现。

    例如:

    product,product(x,y,...)将会返回多个函数的乘积。

    格式:product(2,2)

    输出结果:4

    sum,这个函数的意思就显而易见啦,它就是表示“和”。

    格式:sum(4,1)

    输出结果:5

    我们可以根据该函数实现自定义的评分:

    sum(product(termfreq(product_name,*电钻*),20),termfreq(raws_title,*电钻*)) desc

    结果完满展现:

    题外话,在搜索过程中,需要更多的精准匹配,可以同样从“同义词”入手,等我研究出成果,再和大家一起分享。

    对于solrj整合这个关键词词频排序,也是非常简单的,你们会java的应该会了吧,其实就是调用solr自身的api接口实现

  • 相关阅读:
    Datasource Server returns invalid timezone问题
    springboot之异常处理
    maven的安装配置
    Javajdk的安装
    jdbc连接mysql数据库 (idea)
    关于MySQL数据库的卸载
    python3.6.8的安装及初步使用
    计算机基础及编程语言的简单了解
    git、码云的使用
    粘滞位权限
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9444466.html
Copyright © 2020-2023  润新知