suggest特征通过使用suggester基于所提供的文本来建议相似的术语。部分suggest功能还在开发中。
suggest请求部分在_search请求中或者通过REST_suggest断点和查询部分一起定义。
POST twitter/_search
{
"query" : {
"match": {
"message": "tring out Elasticsearch"
}
},
"suggest" : {
"my-suggestion" : {
"text" : "trying out Elasticsearch",
"term" : {
"field" : "message"
}
}
}
}
针对_suggest端点执行的建议请求应忽略周围的suggest元素,该元素仅在suggest请求是搜索的一部分时使用。
POST _suggest
{
"my-suggestion" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
}
}
每个请求可以指定几个suggestions。 每个suggestion用任意名称标识。 在下面的示例中,请求了两个suggestions。my-suggest-1和my-suggest-2两个suggestions使用术语suggester,但有不同的test。
POST _suggest
{
"my-suggest-1" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"text" : "kmichy",
"term" : {
"field" : "user"
}
}
}
下面的 suggest 响应示例包括对于 my-suggest-1 和 my-suggestion-2 的 suggest 响应。 每个suggest 部分包含条目(entries)。 每个条目实际上是来自 suggest 文本的 token ,并且包含 suggest 文本中的 suggest 条目文本,原始的条目开始于 suggest 偏移(offset)和长度,并且如果找到任意数目的选项。
{
"_shards": ...
"my-suggest-1": [ {
"text": "tring",
"offset": 0,
"length": 5,
"options": [ {"text": "trying", "score": 0.8, "freq": 1 } ]
}, {
"text": "out",
"offset": 6,
"length": 3,
"options": []
}, {
"text": "elasticsearch",
"offset": 10,
"length": 13,
"options": []
} ],
"my-suggest-2": ...
}
每个选项数组(option array)包含一个选项对象,其中包括suggest文本,其文档频率和分数与suggest输入文本相比较。 分数的意义取决于使用的suggester。 术语suggester的分数是基于编辑(edit)距离。
全局 suggest 文本
为了避免重复suggest文本,可以定义全局文本。 在下面的示例中,suggest文本是全局定义的,并适用于my-suggest-1和my-suggest-2建议。
POST _suggest
{
"text" : "tring out Elasticsearch",
"my-suggest-1" : {
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"term" : {
"field" : "user"
}
}
}
在上述示例中,suggest文本也可以被指定为suggest特定选项。 在suggestion级别上指定的suggest文本覆盖全局级别上的suggest文本。