在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 的基本 使用的更多相关文章

  1. 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 ...

  2. [ES]elasticsearch章5 ES的分词(二)

    Elasticsearch 中文搜索时遇到几个问题: 当搜索关键词如:“人民币”时,如果分词将“人民币”分成“人”,“民”,“币”三个单字,那么搜索该关键词会匹配到很多包含该单字的无关内容,但是如果将 ...

  3. 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 ...

  4. Elasticsearch Suggester 学习

    suggester搜索就像百度搜索框中的提示类似. Elasticsearch 中提供类似的搜索功能. 答案就在Suggesters API. Suggesters基本的运作原理是将输入的文本分解为t ...

  5. 如何用 Node.js 和 Elasticsearch 构建搜索引擎

    Elasticsearch 是一款开源的搜索引擎,由于其高性能和分布式系统架构而备受关注.本文将讨论其关键特性,并手把手教你如何用它创建 Node.js 搜索引擎. Elasticsearch 概述 ...

  6. 使用ElasticSearch服务从MySQL同步数据实现搜索即时提示与全文搜索功能

    最近用了几天时间为公司项目集成了全文搜索引擎,项目初步目标是用于搜索框的即时提示.数据需要从MySQL中同步过来,因为数据不小,因此需要考虑初次同步后进行持续的增量同步.这里用到的开源服务就是Elas ...

  7. ES系列十三、Elasticsearch Suggester API(自动补全)

    1.概念 1.补全api主要分为四类 Term Suggester(纠错补全,输入错误的情况下补全正确的单词) Phrase Suggester(自动补全短语,输入一个单词补全整个短语) Comple ...

  8. elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)

    一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...

  9. java课程设计之--Elasticsearch篇

    一.团队课程设计博客链接 https://www.cnblogs.com/Rasang/p/12169899.html 二.个人负责模块或任务说明 2.1Elasticsearch简介 Elastic ...

随机推荐

  1. JS学习笔记10之Math对象

    -->Math对象 常用属性和方法-->使用Math对象制作相应的效果 Math对象用于执行数学任务 一.Math对象的属性: 二.Math对象的方法: 三.常用属性和方法: Math.P ...

  2. webpack初体验

    本人菜鸟一枚,最近一直在研究webpack的使用,记录下自己的学习体会,由于网上关于webpack的资源(技术博客)太多,对于初学webpack的新手来说,看着五花八门的技术博客,真是头晕眼花(可能是 ...

  3. CSS3 Gradient 渐变

    转载自:http://www.w3cplus.com/content/css3-gradient CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE, ...

  4. 使用jq插入节点

    .append()和.appendTo()两种方法功能相同,主要的不同是语法——内容和目标的位置不同 append()前面是要选择的对象,后面是要在对象内插入的元素内容 appendTo()前面是要插 ...

  5. 函数模块:CTVB_COMPARE_TABLES--两个表中删除/变更/粘贴分解

    这个函数模块比较两个内表,将被删除.增加和修改的内表行分别分组输出. 输入参数:TABLE_OLD:旧表TABLE_NEW:新表KEY_LENGTH:键长度,指定内表中的前若干个字节(在 Unicod ...

  6. 好用的第三方控件,Xcode插件(不断更新)

    第三方控件类:   1.提示框 MBProgressHUD: 是一款非常强大的.提供多种样式的提示框.使用起来简单.方便.可以在GitHub上查看具体的使用方法. https://github.com ...

  7. iOS9请求https问题-记录

    iOS9 开始苹果将HTTP全改为HTTPS了,所以出现网络请求失败问题,解决办法: 1.改回HTTP: 在info.plist文件中添加一个Key:NSAppTransportSecurity(字典 ...

  8. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  9. Vs2013 html5开发WP8.1 APP之jquery

    仿安卓原生界面,先使用JQM,最新的JQM使用了JQ1.8.5 然后在WP8以上就会遇到动态创建控件的安全性问题 换成JQ2.X即可,但在WP8.1中一定不要删除了 <script src=&q ...

  10. ASP.NET MVC3 Razor 调试与预加载

    目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载   在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...