elasticsearch suggest 的几种使用-completion 的基本 使用
在lucene里面,suggest 的支持非常完善,可以随心所欲的定制;
但是在es中使用起来就没有那么方便了。
es给suggest 分类4类:term ;phrase; completion; context;
目前最新版本是es1.2.1 这一块也还在不断完善中;
term suggester 是根据某词元在制定的字段中出现的频次来做出提示;
phrase suggester 是给term 上做了加强;
这里不做使用方法介绍;
链接地址:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-term.html
剩下的是completion 、context suggester。
这两个的使用与上面个使用方法完全不一样,上面都在查询的时候根据制定字段内容来做提示,而这两种是需要在mapping 里面定制suggester字段。使用时完全匹配时提示;
completion suggester 官方文档
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
文档讲解的非常全面,遗憾的是没有代码,这里把代码加上java client;
1:设置mapping 中的suggester
@Test
public void createQucikIndecs() throws IOException{
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("pingzhuang")
.startObject("properties")
.startObject("id").field("type", "long").field("store", "yes").field("index", "not_analyzed").endObject()
.startObject("name").field("type", "string").field("store", "no").field("indexAnalyzer", "ik").field("searchAnalyzer", "ik").endObject()
.startObject("suggest").field("type","completion").field("index_analyzer","simple").field("search_analyzer","simple").field("payloads","true").endObject()
.endObject()
.endObject()
.endObject();
ESHandler.createQuickIndices("chinamedic", "pingzhuang", mapping, "formedic");
}
2: 设置好了以后,在做索引的时候每次都应该添加提示
@Test
public void addIndex(){
String json="{\"id\":44,\"name\":\"老狼-白衣飘飘的年代\",\"suggest\":{\"input\":\"老狼-白衣飘飘的年代\"}}";
String json1="{\"id\":42,\"name\":\"老狼-郎心似铁\",\"suggest\":{\"input\":\"老狼-郎心似铁\"}}";
String json2="{\"id\":43,\"name\":\"老狼-流浪歌手的请人\",\"suggest\":{\"input\":\"老狼-流浪歌手的请人\"}}";
ESHandler.addOneIndex("chinamedic","pingzhuang", json);
ESHandler.addOneIndex("chinamedic","pingzhuang", json1);
ESHandler.addOneIndex("chinamedic","pingzhuang", json2);
System.out.println();
}
3: 然后就是查询获得提示了
/**
* 搜索建议,自动补全搜索结结果
* @param indices 索引库名称
* @param prefix 搜索前缀词
* @return 建议列表
*/
public static List<String> getCompletionSuggest(String indices,
String prefix) {
CompletionSuggestionBuilder suggestionsBuilder = new CompletionSuggestionBuilder(
"complete");
suggestionsBuilder.text(prefix);
suggestionsBuilder.field("suggest");
suggestionsBuilder.size(10);
SuggestResponse resp = client.prepareSuggest(indices)
.addSuggestion(suggestionsBuilder).execute().actionGet();
List<? extends Entry<? extends Option>> list = resp.getSuggest()
.getSuggestion("complete").getEntries();
List<String> suggests = new ArrayList<String>();
if (list == null) {
return null;
} else {
for (Entry<? extends Option> e : list) {
for (Option option : e) {
suggests.add(option.getText().toString());
}
}
return suggests;
}
}
ok,到这里一个简单的completion suggester 就完成了。
后续再添加更多高级的使用示例。
elasticsearch suggest 的几种使用-completion 的基本 使用的更多相关文章
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...
- [ES]elasticsearch章5 ES的分词(二)
Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...
- Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...
- Elasticsearch Suggester 学习
suggester搜索就像百度搜索框中的提示类似. Elasticsearch 中提供类似的搜索功能. 答案就在Suggesters API. Suggesters基本的运作原理是将输入的文本分解为t ...
- 如何用 Node.js 和 Elasticsearch 构建搜索引擎
Elasticsearch 是一款开源的搜索引擎,由于其高性能和分布式系统架构而备受关注.本文将讨论其关键特性,并手把手教你如何用它创建 Node.js 搜索引擎. Elasticsearch 概述 ...
- 使用ElasticSearch服务从MySQL同步数据实现搜索即时提示与全文搜索功能
最近用了几天时间为公司项目集成了全文搜索引擎,项目初步目标是用于搜索框的即时提示.数据需要从MySQL中同步过来,因为数据不小,因此需要考虑初次同步后进行持续的增量同步.这里用到的开源服务就是Elas ...
- ES系列十三、Elasticsearch Suggester API(自动补全)
1.概念 1.补全api主要分为四类 Term Suggester(纠错补全,输入错误的情况下补全正确的单词) Phrase Suggester(自动补全短语,输入一个单词补全整个短语) Comple ...
- elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)
一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...
- java课程设计之--Elasticsearch篇
一.团队课程设计博客链接 https://www.cnblogs.com/Rasang/p/12169899.html 二.个人负责模块或任务说明 2.1Elasticsearch简介 Elastic ...
随机推荐
- JS学习笔记10之Math对象
-->Math对象 常用属性和方法-->使用Math对象制作相应的效果 Math对象用于执行数学任务 一.Math对象的属性: 二.Math对象的方法: 三.常用属性和方法: Math.P ...
- webpack初体验
本人菜鸟一枚,最近一直在研究webpack的使用,记录下自己的学习体会,由于网上关于webpack的资源(技术博客)太多,对于初学webpack的新手来说,看着五花八门的技术博客,真是头晕眼花(可能是 ...
- CSS3 Gradient 渐变
转载自:http://www.w3cplus.com/content/css3-gradient CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE, ...
- 使用jq插入节点
.append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插 ...
- 函数模块:CTVB_COMPARE_TABLES--两个表中删除/变更/粘贴分解
这个函数模块比较两个内表,将被删除.增加和修改的内表行分别分组输出. 输入参数:TABLE_OLD:旧表TABLE_NEW:新表KEY_LENGTH:键长度,指定内表中的前若干个字节(在 Unicod ...
- 好用的第三方控件,Xcode插件(不断更新)
第三方控件类: 1.提示框 MBProgressHUD: 是一款非常强大的.提供多种样式的提示框.使用起来简单.方便.可以在GitHub上查看具体的使用方法. https://github.com ...
- iOS9请求https问题-记录
iOS9 开始苹果将HTTP全改为HTTPS了,所以出现网络请求失败问题,解决办法: 1.改回HTTP: 在info.plist文件中添加一个Key:NSAppTransportSecurity(字典 ...
- Retrofit 入门学习
Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...
- Vs2013 html5开发WP8.1 APP之jquery
仿安卓原生界面,先使用JQM,最新的JQM使用了JQ1.8.5 然后在WP8以上就会遇到动态创建控件的安全性问题 换成JQ2.X即可,但在WP8.1中一定不要删除了 <script src=&q ...
- ASP.NET MVC3 Razor 调试与预加载
目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载 在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...