需求:实现一种类似于京东的自动提示功能。
1:用solr 的suggest组件。
2:用TermsComponent
在传统数据库中,有一种模糊查询。。类似于 keyword like "京东%" ,然后统计数量,返回给前端。。但,这样有一个问题。如果该字段非词性的。精确性和效率性不高。
solr中TermsComponent组件完美的解决了这么一个方案,能够统计指定搜索域中 所有词的 信息。类似于lucene Term查询。
刚研究了会solrj的TermsComponent :http://wiki.apache.org/solr/TermsComponent
solrconfig配置如下:
<searchComponent name="terms" class="solr.TermsComponent"/>
<!-- A request handler for demonstrating the terms component -->
<requestHandler name="/terms" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<bool name="terms">true</bool>
<bool name="distrib">false</bool>
</lst>
<arr name="components">
<str>terms</str>
</arr>
</requestHandler>
返回结果:默认按词的count出现次数倒序排序。
solrj代码:
package com.lubanec.action;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.TermsResponse;
import com.lubanec.index.service.Indexer;
public class Test {
public static void main(String[] args) throws Exception {
// 实例化solrserver,以获取与solrserver的通信
SolrServer solrserver = Indexer.getHttpSolrServer("goods");
// 创建查询参数以及设定的查询参数
SolrQuery params = new SolrQuery();
params.set("q", "*:*");
params.set("qt", "/terms");
// parameters settings for terms requesthandler
// 参考(refer to)http://wiki.apache.org/solr/termscomponent
params.set("terms", "true");
params.set("terms.fl", "goods");
//指定下限
// params.set("terms.lower", ""); // term lower bounder开始的字符
// params.set("terms.lower.incl", "true");
// params.set("terms.mincount", "1");
// params.set("terms.maxcount", "100");
// http://localhost:8983/solr/terms?terms.fl=text&terms.prefix=学 //
// using for auto-completing //自动完成
// params.set("terms.prefix", "联");
params.set("terms.regex", "学+.*");
params.set("terms.regex.flag", "case_insensitive");
//
// params.set("terms.limit", "20");
// params.set("terms.upper", ""); //结束的字符
// params.set("terms.upper.incl", "false");
//
// params.set("terms.raw", "true");
params.set("terms.sort", "count");//terms.sort={count|index} -如果count,各种各样的条款术语的频率(最高计数第一)。 如果index,索引顺序返回条款。默认是count
// 查询并获取相应的结果!
QueryResponse response = solrserver.query(params);
// 获取相关的查询结果
if (response != null) {
TermsResponse termsResponse = response.getTermsResponse();
if (termsResponse != null) {
Map<String, List<TermsResponse.Term>> termsMap = termsResponse.getTermMap();
for (Map.Entry<String, List<TermsResponse.Term>> termsEntry : termsMap.entrySet()) {
// System.out.println("Field Name: " + termsEntry.getKey());
List<TermsResponse.Term> termList = termsEntry.getValue();
for (TermsResponse.Term term : termList) {
System.out.println(term.getTerm() + " : "+ term.getFrequency());
}
}
}
}
}
}
分享到:
相关推荐
演示了怎样使用easysolr.net开发facet功能,怎样模糊查询,精确查询。
增加连续数字、字母、英语及其组合智能分词(可关闭isIndistinct)支持lucence5.x以上版本。配置文件:<fieldType name="text_ik" class="solr.TextField"> <filter class="solr.LowerCaseFilterFactory"/...
solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...
资源名称:相关性搜索 利用Solr与Elasticsearch创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...
solr
solr
solr文档
增加连续数字、字母、英语及其组合智能分词(可关闭isIndistinct)支持lucence5.x以上版本。配置文件:<fieldType name="text_ik" class="solr.TextField"> <filter class="solr.LowerCaseFilterFactory"/...
solr manageschema 配置文件,增加了分词器后的配置文件
Apache Solr(solr-8.11.1.tgz)Binary releases 二进制版本
solr技术文solr技术文solr技术文
Solr定时更新Solr定时更新
大数据Solr二次开发.pdf
章节二:Solr基础(下) 1. Solr基础知识 2. Solr查询 3. Facet查询 4. Group查询 5. 高亮查询 6. Suggest查询 7. SolrJ 章节三:Solr高级(上) 1. Solr Cloud 2. 函数查询 3. 地理位置查询 4. JSON Facet 章节四:...
如何使用solr搭建服务器
Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的...
Apache Solr(solr-8.11.1.zip)Binary releases 二进制版本
solr增量更新-
solr安装包下载地址
Solr(Cloudera)使用手册