solr 相似查询-MoreLikeThis

参考文档:

MoreLikeThis

MoreLikeThisHandler

在solr中有两种方式实现MoreLikeThis:
第一种:SearchHandler中的MoreLikeThisComponent,MoreLikeThis以组件的身份出现,适于简单应用。
第二种:MoreLikeThisHandler,MoreLikeThis作为一个单独的Handler来处理,可以应用过滤等较复杂操作

1、采用相似查询的field的存储方式最好采用TermVectors方式,如果field没有采用TermVectors方式,MoreLikeThis将会从store存储中生成terms。

 <field name="cat" ... termVectors="true" />

2、参数说明:

  • mlt.fl    :设置相似查询字段,最好采用TermVectors存储。
  • mlt.mintf   :最小分词频率,源文档中小于该频率的分词将被忽略掉。tf:分词后的词在该文档中的频率
  • mlt.mindf   : 最小文档频率,该词所在文档的个数小于这个值时将不用于相似判断。df:该词所在文档的个数。
  • mlt.minwl :词的最小长度,当词的长度小于该值时不用于相似判断。
  • mlt.maxwl  :词的最大长度,当词的长度大于该值时不用于相似判断。
  • mlt.maxqt  :构造相似查询的terms的最大数量。
  • mlt         : true ,开启相似查询。
  • mlt.count   :为每一个相似查询结果返回指定数量的相似文档。
  • mlt.boost :相似查询是否开启加权功能。true/false
  • mlt.qf     :相似查询field字段加权设置。

    如:mlt.qf=text^0.5 features^1.0 name^1.2

   或者:

       <str name="mlt.qf">
         text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
         title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0
       </str>

第一种方法:morelikeThis组件为response中的每一个document返回相似查询文档,也许这应该叫做"MoreLikeThese"。

例子:

http://localhost:8983/solr/select?q=apache&mlt=true&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fl=id,score

第二种方法:当你只需要相似查询的相关信息时,可以使用MoreLikeThisHandler。

MoreLikeThisHandler具有以下参数:


rows


控制返回结果的最大数量


mlt.match.include


结果集中是否包含原始的文档


mlt.match.offset


By default, the MoreLikeThis query operates on the first result for ‘q‘


mlt.interestingTerms


值:"list", "details", "none" --显示相似查询中使用到的相关的terms。这些terms时最高评分的terms。如果选择‘details‘,将会显示每个term的权值。

见MoreLikeThis额外的输入参数。

MoreLikeThisHandler同样也可以使用ContentStream来查找相似文档。它将会从发送过来的文本中抽取相关terms。

示例:

  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">
    <lst name="defaults">
        <str name="mlt.fl">title</str>
        <str name="mlt.mintf">1</str>
        <str name="mlt.minwl">2</str>
        <int name="rows">3</int>
    </lst>
  </requestHandler>

其中<lst name="defaults"> 时查询时默认的参数值,可有可无。

简单例子:

http://localhost:8983/solr/mlt?q=id:UTF8TEST&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1

http://localhost:8983/solr/mlt?q=id:UTF8TEST&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&mlt.match.include=false

http://localhost:8983/solr/mlt?q=id:SP2514N&mlt.fl=manu,cat&mlt.mindf=1&mlt.mintf=1&fq=inStock:true&mlt.interestingTerms=details

使用ContentStreams:

If you post text in the body, that will be used for similarity. Alternatively, you can put the posted content in the URL using something like:

http://localhost:8983/solr/mlt?stream.body=electronics%20memory&mlt.fl=manu,cat&mlt.interestingTerms=list&mlt.mintf=0

If remoteStreaming is enabled, you can find documents similar to the text on a webpage:

http://localhost:8983/solr/mlt?stream.url=http://lucene.apache.org/solr/&mlt.fl=manu,cat&mlt.interestingTerms=list&mlt.mintf=0

时间: 2024-10-15 20:21:11

solr 相似查询-MoreLikeThis的相关文章

如何大幅优化solr的查询性能(转)

提升软件性能,通常喜欢去调整各种启动参数,这没有多大意义,小伎俩. 性能优化要从架构和策略入手,才有可能得到较大的收益 Solr的查询是基于Field的,以Field为基本单元,例如一个文章站要索引 classArticle {    String title;    String content;    String tags; } 查询参数: q=title:big && content:six Solr会顺序执行两次 field查询 ,这个开销非常大. 实际例子 :50万条记录,一次

solr 范围查询

[]表示查询一个包括边界范围, {}表示查询一个不包括边界范围 A TO * 表示没有上界即>=A或是>A ,视使用的是[]还是{}而定 * TO A 表示没有下界即<=A或是<A ,视使用的是[]还是{}而定 NOW表示当前时间,NOW/DAY表示当前日期. 支持运算,比如取前一天就是NOW/DAY-1DAY,后一天就是NOW/DAY+1DAY,前年NOW-1YEAR solr 范围查询

solr特点五: MoreLikeThis(查找相似页面)

在 Google 上尝试一个查询,您会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档.Solr 使用MoreLikeThisComponent(MLT)和 MoreLikeThisHandler实现了一样的功能.如上所述,MLT 是与标准 SolrRequestHandler集成在一起的:MoreLikeThisHandler与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求.我将着重讲述 MLT,因为使用它的

利用SOLR搭建企业搜索平台 之——solr的查询语法

  1. 首先假设我的数据里fields有:name, tel, address 预设的搜寻是name这个字段, 如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称. 2. 查询规则: 如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加 “:” (不包含”号) 符号, 例如: address:北京市海淀区上地软件园 tel:88xxxxx1 1>. q代表query input 2>. version代表solr版本(建议不要变动此变量) 3>. start

[solr] - defType - 查询权重排序

Solr的defType有dismax/edismax两种,这两种的区别,可参见:http://blog.csdn.net/duck_genuine/article/details/8060026 下面示例用于演示如下场景: 有一网站,在用户查询的结果中,需要按这样排序: VIP的付费信息需要排在免费信息的前头 点击率越高越靠前 发布时间越晚的越靠前 这样的查询排序使用普通的查询结果的Order by是做不到的,必需使用solr的defType. 做法: 1.先看schema.xml的定义: <

Solr高级查询Facet

一.什么是facet solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索. facet主要用于导航实现渐进式精确搜索,从两张图来看看Facet用途. (图1)当进入重庆二手车列表时搜索条件会列出所有品牌.车系.价格区间.车系年贷款等等. (图2)当你点击大众时页面刷新车系会列出大众所属的所有车系.价格区间.顾名思义我虽solr facet的理解也就是:  当然,你从京东导航.淘宝导航也能看到如此效果,这样的场景下

solr默认查询设置

在搜索过程中,如果我们每次请求中都传入很多固定的参数,会很繁琐,这里再solrconfig.xml中初始化定义一些不经常改动的搜索参数: <requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <

solr精确查询,查询关键字分词后,指定满足匹配所有

一.solr查询,查询配置了查询分词器的字段,默认会对查询关键字做分词处理 1.如查询关键字F1501ZY000011,使用solr7自带的中文分词器,默认会分词为:f,1501,zy,000011 2.不使用defType=edismax参数的查询结果 二.使用参数defType=edismax&mm=100%,指定查询关键字分词后,满足匹配所有 三.java的solrj中指定defType=edismax参数 SolrQuery solrQuery = new SolrQuery(q);  

Solr聚合查询

1  分组查询 概述:Solr常用的分组查询有两种,Facet分组和Group分组,分别以下列出这两种查询: 1.1     Facet分组 solr种以导航为目的的查询结果成为facet,在用户查询的结果上根据分类增加了count信息,然后用户根据count信息做进一步搜索, Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够按照Facet的字段进行分组并统计. Solr Fact提供了4种类型的Fact <lstname="facet_co