在我们使用网页搜索时,会注意到每一个结果都包含一个 “相似页面” 链接,单击该链接,就会发布另一个搜索请求,查找出与起初结果类似的文档。Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了一样的功能。如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求。我将着重讲述 MLT,因为使用它的可能性更大一些。幸运的是,不需要任何设置就可以查询它,所以您现在就可以开始查询。
MLT 要求字段被储存或使用检索词向量,检索词向量以一种以文档为中心的方式储存信息。MLT 通过文档的内容来计算文档中关键词语,然后使用原始查询词语和这些新词语创建一个新的查询。提交新查询就会返回其他查询结果。所有这些都可以用检索词向量来完成:只需将 termVectors="true" 添加到 schema.xml 中的 <field> 声明。
MoreLikeThisComponent 参数:
参数 |
说明 |
值域 |
mlt |
在查询时,打开/关闭 MoreLikeThisComponent 的布尔值。 |
true|false |
mlt.count |
可选。每一个结果要检索的相似文档数。 |
> 0 |
mlt.fl |
用于创建 MLT 查询的字段。 |
任何被储存的或含有检索词向量的字段。 |
mlt.maxqt |
可选。查询词语的最大数量。由于长文档可能会有很多关键词语,这样 MLT 查询可能会很大,从而导致反应缓慢或可怕的 TooManyClausesException,该参数只保留关键的词语。 |
> 0 |
要想使用匹配相似首先在 solrconfig.xml 中配置 MoreLikeThisHandler
<requestHandler name="/mlt" class="solr.MoreLikeThisHandler"> |
然后我就可以请求
http://localhost:8983/skyCore/mlt?q=id%3A6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531&mlt.true&mlt.fl=content&wt=xml&indent=true
上面请求的意思查找 id 为 6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531 的 document ,然后返回与此 document 在 name 字段上相似的其他 document。需要注意的是 mlt.fl 中的 field 的 termVector=true 才有效果
<field name="content" type="text_smartcn" indexed="false" stored="true" multiValued="false" termVector="true"/> |
使用SolrJ时也同样加入参数就可以
SolrQuery query = new SolrQuery(); query.set("qt", "/mlt"); query.set("mlt.fl","content"); query.set("fl", "id,"); query.set("q", "id: 6F398CCD-2DE0-D3B1-9DD6-D4E532FFC531"); query.setStart(0); query.setRows(5); QueryResponse rsp = server.query(query); SolrDocumentList list = rsp.getResults(); |
拼音检索中国人的专用检索,例如:中文内容为 中国 的输入zhongguo、zg、zhonggu 全拼、简拼、拼音的相邻的一部份都应该能检索出 中国 来。
想要实现拼音检索第一个就是拼音转换我这里用的是pinyin4j进行拼音转换。第二个就是N-Gram的题目,推敲到用户可能输入的既不是前缀也不是后缀,所以此处选择的是N-Gram技巧,但不同于常用的N-Gram,我应用的从一边开端的单向的N-Gram,Solr里的实现叫EdgeNGramTokenFilter,但是分的分的太细了,不需要这么复杂EdgeNGramTokenFilter,也就是说我们用的N-Gram不同于传统的N-Gram。
同样的例子使用EdgeNGramTokenFilter从前往后取2-Gram的结果是zh, 一般是取min–max之间的所有gram,所以使用EdgeNGramTokenFilter取2-20的gram结果就是zh,zho, zhon, zhong, zhongg, zhonggu, zhongguo, 从这个例子也不难理解为什么我要选择使用EdgeNGramTokenFilter而非一般意义上的N-Gram, 考虑到用户可能输入的不是前缀而是后缀,所以为了照顾这些用户,我选择了从前往后和从后往前使用了两次EdgeNGramTokenFilter,这样不只是前缀、后缀,二十任意的字串都考虑进去了,所以大幅度的提高了搜索体验.
现在思路明确了我们把它结合到Solr中,为了方便使用现在写了两个Filter进行处理拼音分词问题一个是拼音转换Filter(PinyinTransformTokenFilter)一个是拼音N-Gram的Filter(PinyinNGramTokenFilter),这样一来使用时就不用在添加索引前做拦音的转换了。而且PinyinTransformTokenFilter还有个好处就是它只使用中文分词器分过的词,也就是说做转换的词都是有用的不重复的,不会对没用的停词类的做拼音转换和重复拼音转换,这样大大的提高了拼音转换速度。
想要Solr支持拼音检索就要先把拼音分词(PinyinAnalyzer)的jar复制到\solr\contrib\analysis-extras\lib下,然后在schema.xml中配置一个拼音字段类型:
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0"> <analyzer type="index"> <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/> <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/> <filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" /> <filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> |
minTermLenght:最小中文词长度,意思是小于这个值的中文词不会做拼音转换。
minGram:最小拼音切分长度。
如果想使用简拼的话在拼音转换Filter 使用这个参数isFirstChar="true"就可以了
相关推荐
同时,你可以利用Solr的 faceting(分面搜索)、highlighting(高亮显示)、spell checking(拼写检查)等功能来提高用户体验。此外,Solr还支持实时添加和更新文档,以及高效的近实时搜索。 在部署和使用Solr时,...
它提供了全文检索、命中高亮、拼写检查、缓存、近实时搜索等特性,广泛应用于网站内容搜索、电子商务产品搜索等领域。本次分享的资源是Solr的4.10.3版本。 Solr 4.10.3是一个稳定版本,它包含了之前版本的所有修复...
通过对Solr客户端的初始化、查询及拼写检查等功能的实现,以及对业务逻辑的封装,为用户提供了一个高效且准确的搜索体验。同时,通过依赖注入、配置参数读取等机制,保证了代码的可维护性和扩展性。
Solr的核心功能是提供高效的全文检索、命中高亮、拼写检查、分类、 faceting(分面导航)和更多其他高级功能。它基于Lucene库,提供了更易用的API和配置方式,使得开发者可以快速搭建搜索引擎。 华为FusionInsight ...
9. **拼写纠错**:Solr内置了拼写检查功能,当用户输入错误的关键词时,系统可以提供正确的建议。 10. **地理空间搜索**:Solr支持地理空间搜索,可以基于地理位置进行范围查询和距离排序。 11. **XML/JSON API**...
这些jar包在特定场景下会发挥重要作用,例如solr-clustering.jar提供了集群和导航功能,solr-spellcheck.jar支持拼写检查。 对于描述中提到的"版本统一",这意味着所有的jar包应为同一版本的Solr发布。这是因为不同...
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要提供高速、可扩展的全文检索、命中高亮、拼写检查、查询分析等功能,广泛应用于企业级搜索应用。它基于Java语言开发,使用Lucene库作为其核心搜索...
- "搜索" 部分则提供了对 Solr 搜索功能的全面介绍,包括搜索语法、JSON 请求 API、分面搜索、高亮显示、拼写检查等。 - "文档、字段和模式设计" 详细介绍了 Solr 中的文档结构、字段类型以及如何定义模式等高级主题...
Solr是Apache Lucene项目下的一个企业级搜索服务器,它提供了全文检索、命中高亮、拼写检查、分类、 faceting、实时添加文档等高级功能。在Java环境中使用Solr,通常需要引入一系列的jar包来支持Solr的客户端操作。...
5. **Spell Checking(拼写检查)**:Solr内置了拼写检查器,能自动纠正用户的搜索输入,提高搜索命中率。 6. **XML/JSON等多格式支持**:Solr支持多种数据导入方式,如XML、CSV、JSON等,方便不同来源的数据集成。...
它提供了高效、可扩展的全文检索、命中高亮、拼写检查、分类、 faceting、实时索引和多语言支持等特性。在商业环境中,Solr常用于构建企业级搜索解决方案,使用户能够快速、准确地搜索大量数据。 Solr-7.7.3是Solr...
Solr是Apache软件基金会的一个项目,它是一款强大的全文搜索服务器,提供了诸如索引、搜索、高亮显示、拼写检查等多种功能。对于处理中文文档,一个合适的中文分词器是必不可少的,IKAnalyzer就是这样一个解决方案。...
文档中介绍了 Solr 的拼写检查功能,包括如何配置拼写检查器、如何使用拼写建议等。 #### 查询重排序 文档中探讨了如何根据特定条件对搜索结果进行重新排序,以提供更相关的搜索结果。 #### 结果文档的转换 文档...
此外,Solr还支持实时更新、分页、排序、高亮显示搜索结果、拼写检查和建议等功能。在ASP.NET中,你可以根据需求利用这些特性来定制你的搜索体验。 为了处理更复杂的情况,比如批量导入数据到Solr,你可以使用...
同时,你还可以学习如何使用Solr的API来实现高级搜索特性,如 faceting(分面搜索)、highlighting(高亮显示)和spell checking(拼写检查)。 通过这个"solr demo",你不仅能够掌握Solr的基本操作,还能深入理解...
Apache Solr是一个流行的开源搜索引擎,它提供全文搜索、命中高亮、拼写建议等功能,广泛应用于网站内容管理和企业级信息检索。在Solr 5.x版本中,为了实现数据的定时更新,用户需要借助特定的扩展来实现定时生成...
Solr使得在大量数据中进行全文搜索、近似搜索、拼写检查以及多种其他高级功能变得简单。Tomcat是Java Servlet容器,常用于部署Java web应用程序。 在部署Solr于Tomcat之前,我们需要以下步骤: 1. **下载与准备**...
Solr-5.5.5还支持多种特性,如实时索引、多字段搜索、高亮显示、 faceted search(分面搜索)、拼写检查等,这些都极大地增强了其在大数据环境下的搜索和分析能力。此外,Solr的分布式特性使其能够轻松扩展,适应高...
Apache Solr 是一个开源的搜索平台,它提供了全文检索、高亮显示、拼写建议等功能。在Solr 4.9版本中,可以与Jetty或Tomcat这样的Servlet容器进行集成,以实现更灵活的部署。 1. **Solr 4.9与Jetty的直接运行** - ...