提示功能通过使用提示,根据提供的文本提示外观相似的术语。
建议请求部分在_search请求中与查询部分一起定义。如果查询部分被忽略,则仅返回建议。
每个请求可以指定几个建议。每个建议都以任意名称标识。在下面的示例中,提出了两个建议。 my-suggest-1和my-suggest-2建议都使用术语“建议者”,但文字不同。
POST _search
{
"suggest": {
"my-suggest-1" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"text" : "kmichy",
"term" : {
"field" : "user"
}
}
}
}
为了避免重复建议文本,可以定义全局文本。在下面的示例中,建议文本是全局定义的,并且适用于my-suggest-1和my-suggest-2建议。
POST _search
{
"suggest": {
"text" : "tring out Elasticsearch",
"my-suggest-1" : {
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"term" : {
"field" : "user"
}
}
}
}
以下建议响应示例包括对my-suggest-1和my-suggest-2的建议响应。每个建议部分都包含条目。
每个条目实际上是来自建议文本的标记,并且包含建议条目文本,建议文本中的原始起始偏移量和长度以及(如果找到)任意数量的选项。
"suggest": {
"my-suggest-1": [ {
"text": "tring",
"offset": 0,
"length": 5,
"options": [ {"text": "trying", "score": 0.8, "freq": 1 } ]
}, {
"text": "out",
"offset": 6,
"length": 3,
"options": []
}.....
每个选项数组都包含一个选项对象,该选项对象包含建议文本,其文档频率和与建议输入文本相比的得分。分数的含义取决于所使用的建议者。推荐者一词的得分是基于编辑距离的
|
搜索文本。建议文本是必填选项,需要全局或按建议设置。 |
|
从中获取候选建议的字段。这是必需选项,需要全局设置或根据建议设置。 |
|
分析器用来分析建议文本。默认为建议字段的搜索分析器。 |
|
每个建议文本将返回的最大数。 |
|
定义每个建议文本术语应如何分类建议。两个可能的值:
|
|
提示模式控制要包含的建议,或控制建议的文本术语和建议的控件。可以指定三个可能的值:
|
|
在文本分析之后,将建议的文本术语小写。 |
|
最大编辑距离候选建议可以具有以便被认为是建议。只能是1到2之间的值。任何其他值都将导致引发错误的请求错误。默认为2。 |
|
必须匹配的最小前缀字符数才能成为建议的候选者。默认值为1。增加此数字可提高拼写检查性能。通常,拼写错误不会出现在学期开始时。(旧名称“ prefix_len”已弃用) |
"suggest" : {
"my-suggestion" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
}
}
PUT test
{
"settings": {
"index": {
"number_of_shards": 1,
"analysis": {
"analyzer": {
"trigram": {
"type": "custom",
"tokenizer": "standard",
"filter": ["shingle"]
},
"reverse": {
"type": "custom",
"tokenizer": "standard",
"filter": ["reverse"]
}
},
"filter": {
"shingle": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 3
}
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"fields": {
"trigram": {
"type": "text",
"analyzer": "trigram"
},
"reverse": {
"type": "text",
"analyzer": "reverse"
}
}
}
}
}
}
}
POST test/_doc?refresh=true
{"title": "noble warriors"}
POST test/_doc?refresh=true
{"title": "nobel prize"}
设置完分析器和映射后,就可以在使用术语“建议者”的地方使用“建议者”一词:
POST test/_search
{
"suggest": {
"text": "noble prize",
"simple_phrase": {
"phrase": {
"field": "title.trigram",
"size": 1,
"gram_size": 3,
"direct_generator": [ {
"field": "title.trigram",
"suggest_mode": "always"
} ],
"highlight": {
"pre_tag": "",
"post_tag": ""
}
}
}
}
}
----------------------------返回
{
"_shards": ...
"hits": ...
"timed_out": false,
"took": 3,
"suggest": {
"simple_phrase" : [
{
"text" : "noble prize",
"offset" : 0,
"length" : 11,
"options" : [ {
"text" : "nobel prize", ------这里
"highlighted": "nobel prize",
"score" : 0.5962314
}]
}
]
}
}
java代码可以参考:案例传送门
关联文章:HighLevelRestClient操作suggest
完成提示器提供自动完成/按需搜索功能。这是一个导航功能,可在用户键入内容时指导他们获得相关结果,从而提高搜索精度。它并不用于拼写纠正或“您是否要说”功能,例如术语或短语建议者。
理想情况下,自动完成功能应与用户键入的速度一样快,以提供与用户已经键入的内容相关的即时反馈。因此,完成建议器的速度得到了优化。建议程序使用的数据结构可实现快速查找,但构建成本很高,并且存储在内存中。
要使用此功能,请为此字段指定一个特殊的映射,该映射将为快速完成的字段值编制索引。
PUT music
{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : {
"type" : "completion"
},
"title" : {
"type": "keyword"
}
}
}
}
}
-----------------------------------
PUT /news_website
{
"mappings": {
"news" : {
"properties" : {
"title" : {
"type": "text",
"analyzer": "ik_max_word",
"fields": { // mapping的多字段使用方式
"suggest" : {
"type" : "completion",
"analyzer": "ik_max_word"
}
}
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
----------------------------------------------------
您可以像其他字段一样为建议编制索引。建议由输入和可选的权重属性组成。输入是建议查询将与之匹配的预期文本,权重决定了建议的评分方式。索引建议如下:
PUT music/_doc/1?refresh
{
"suggest" : [
{
"input": "Nevermind",
"weight" : 10
},
{
"input": "Nirvana",
"weight" : 3
}
]
}
|
要使用的索引分析器,默认为 |
|
要使用的搜索分析器,默认值为 |
|
保留分隔符,默认为 |
|
启用位置增量,默认为 |
|
限制单个输入的长度,默认为 |
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nir", 用于搜索建议的前缀
"completion" : { 建议类型
"field" : "suggest" 在其中搜索建议的字段名称
}
}
}
}
--------------------------返回-------
"took": 2,
"timed_out": false,
"suggest": {
"song-suggest" : [ {
"text" : "nir",
"offset" : 0,
"length" : 3,
"options" : [ {
"text" : "Nirvana",
"_index": "music",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"suggest": ["Nevermind", "Nirvana"]
}
} ]
} ]
}
}
|
在其上运行查询的字段的名称(必填)。 |
|
要返回的建议数(默认为 |
|
是否应过滤掉重复的建议(默认为 |
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nor",
"completion" : {
"field" : "suggest",
"skip_duplicates": true
}
}
}
}
模糊:完成建议器还支持模糊查询-这意味着您可以在输入中输入错误,并且仍然可以得到结果。
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"prefix" : "nor",
"completion" : {
"field" : "suggest",
"fuzzy" : {
"fuzziness" : 2
}
}
}
}
}
|
模糊因子,默认为 |
|
如果设置为 |
|
返回模糊建议之前的最小输入长度,默认 |
|
输入的最小长度(不检查模糊替代项)默认为 |
|
如果为 |
正则:完成提示器还支持正则表达式查询,这意味着您可以将前缀表示为正则表达式
POST music/_search?pretty
{
"suggest": {
"song-suggest" : {
"regex" : "n[ever|i]r",
"completion" : {
"field" : "suggest"
}
}
}
}