在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. ArcGIS 的 Oracle 数据库的要求

    [ArcGIS必打补丁]ArcGIS 10.2.2 for Desktop连接Oracle(2014年10月发布)数据库崩溃的问题 http://blog.csdn.net/linghe301/art ...

  2. Linux安全基础:sed命令的使用

    sed 是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作. Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...

  3. Linux0.11内核--进程调度分析之2.调度

    [版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5596830.html ] 上一篇说到进程调度归根结底是调用timer_interrupt函数, ...

  4. Touch ID使用

    前言:如果图片看不了请移步:简书 Touch ID简介 Touch ID指纹识别作为iPhone 5s上的"杀手级"功能早已为人们所熟知,目前搭载的设备有iphone SE.iPh ...

  5. 了解HTML CSS格式化排版 文字排版

    这里简单的写一些涉及到字体排版中常用到的属性, 大家可以学习查看, 也可以mark下以后看. font-family: "Micrsoft Yahei"; 设置字体 font-si ...

  6. OOP感悟

    行内讲的最多的就是出来一年内基本靠copy,一年后才基本懂得如何去写代码,而理解领悟oop,需要的时间却不定. 我工作中,我发现很多人拿着面向对相当的语言作者做着面向过程的事情,不需要知其所以然,只要 ...

  7. android handler ,message消息发送方式

    1.Message msg =  Message.obtain(mainHandler) msg.obj=obj;//添加你需要附加上去的内容 msg.what = what;//what消息处理的类 ...

  8. 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章

    软件工程师要阅读的书籍估计是项目组内最多的.软件工程师处于项目组中最基础的人员储备阶层,与项目的关系最密切.当然,现在是大数据时代,我们无法全部看完所有相关的书籍,只能够先学习工作需要的知识,然后在项 ...

  9. SqlServer数据冗余的问题和解决

    1问题: 1>造成了存储空间的浪费. 2>更新异常.删除异常. 所以一般情况不允许在表中出现数据冗余. 2怎么解决? 把原来表中的数据拆分成多个表来存储. 当把表中的信息拆分成多个表来存储 ...

  10. WinForm:DataGridView新增加行

    1.不显示最下面的新行 通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * ).如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUs ...