Elasticsearch Suggester API(自动补全)
2021-07-13 09:08
标签:多个 控制 soscw section ati reference col cse open 整体效果类似百度搜索,如图: 1.建立索引 2.插入数据 3.看下储存的分词有哪些 结果: 4.term suggest api(搜索单个字段) 搜索下试试,给出错误单词Elasticsearaach response: 5.搜索多个字段分别给出提示: 该 建议文字。建议文本是必需的选项,需要全局或按建议设置。 从中获取候选建议的字段。这是一个必需的选项,需要全局设置或根据建议设置。 用于分析建议文本的分析器。默认为建议字段的搜索分析器。 每个建议文本标记返回的最大更正。 定义如何根据建议文本术语对建议进行排序。两个可能的值: 建议模式控制包含哪些建议或控制建议的文本术语,建议。可以指定三个可能的值: 在文本分析之后,建议文本术语小写。 最大编辑距离候选建议可以具有以便被视为建议。只能是介于1和2之间的值。任何其他值都会导致抛出错误的请求错误。默认为2。 必须匹配的最小前缀字符的数量才是候选建议。默认为1.增加此数字可提高拼写检查性能。通常拼写错误不会出现在术语的开头。(旧名“prefix_len”已弃用) 建议文本术语必须具有的最小长度才能包含在内。默认为4.(旧名称“min_word_len”已弃用) 设置从每个单独分片中检索的最大建议数。在减少阶段,仅根据 用于乘以的因子, 建议应出现的文档数量的最小阈值。可以指定为绝对数字或文档数量的相对百分比。这可以仅通过建议高频项来提高质量。默认为0f且未启用。如果指定的值大于1,则该数字不能是小数。分片级文档频率用于此选项。 建议文本令牌可以存在的文档数量的最大阈值,以便包括在内。可以是表示文档频率的相对百分比数(例如0.4)或绝对数。如果指定的值大于1,则不能指定小数。默认为0.01f。这可用于排除高频术语的拼写检查。高频术语通常拼写正确,这也提高了拼写检查的性能。分片级文档频率用于此选项。 用于比较类似建议术语的字符串距离实现。可以指定五个可能的值: Elasticsearch Suggester API(自动补全) 标签:多个 控制 soscw section ati reference col cse open 原文地址:https://www.cnblogs.com/wangzhuxing/p/9574630.html1.概念
1.补全api主要分为四类
2.Term Suggester(纠错补全)
2.1.api
PUT /book4
{
"mappings": {
"english": {
"properties": {
"passage": {
"type": "text"
}
}
}
}
}
curl -H "Content-Type: application/json" -XPOST ‘http:localhost:9200/_bulk‘ -d‘
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "Lucene is cool"}
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "Elasticsearch builds on top of lucene"}
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "Elasticsearch rocks"}
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "Elastic is the company behind ELK stack"}
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "elk rocks"}
{ "index" : { "_index" : "book4", "_type" : "english" } }
{ "passage": "elasticsearch is rock solid"}
‘
post /_analyze
{
"text": [
"Lucene is cool",
"Elasticsearch builds on top of lucene",
"Elasticsearch rocks",
"Elastic is the company behind ELK stack",
"elk rocks",
"elasticsearch is rock solid"
]
}
{
"tokens": [
{
"token": "lucene",
"start_offset": 0,
"end_offset": 6,
"type": "",
"position": 0
},
{
"token": "is",
"start_offset": 7,
"end_offset": 9,
"type": "",
"position": 1
},
{
"token": "cool",
"start_offset": 10,
"end_offset": 14,
"type": "",
"position": 2
},
{
"token": "elasticsearch",
"start_offset": 15,
"end_offset": 28,
"type": "",
"position": 103
},
{
"token": "builds",
"start_offset": 29,
"end_offset": 35,
"type": "",
"position": 104
},
{
"token": "on",
"start_offset": 36,
"end_offset": 38,
"type": "",
"position": 105
},
{
"token": "top",
"start_offset": 39,
"end_offset": 42,
"type": "",
"position": 106
},
{
"token": "of",
"start_offset": 43,
"end_offset": 45,
"type": "",
"position": 107
},
{
"token": "lucene",
"start_offset": 46,
"end_offset": 52,
"type": "",
"position": 108
},
{
"token": "elasticsearch",
"start_offset": 53,
"end_offset": 66,
"type": "",
"position": 209
},
{
"token": "rocks",
"start_offset": 67,
"end_offset": 72,
"type": "",
"position": 210
},
{
"token": "elastic",
"start_offset": 73,
"end_offset": 80,
"type": "",
"position": 311
},
{
"token": "is",
"start_offset": 81,
"end_offset": 83,
"type": "",
"position": 312
},
{
"token": "the",
"start_offset": 84,
"end_offset": 87,
"type": "",
"position": 313
},
{
"token": "company",
"start_offset": 88,
"end_offset": 95,
"type": "",
"position": 314
},
{
"token": "behind",
"start_offset": 96,
"end_offset": 102,
"type": "",
"position": 315
},
{
"token": "elk",
"start_offset": 103,
"end_offset": 106,
"type": "",
"position": 316
},
{
"token": "stack",
"start_offset": 107,
"end_offset": 112,
"type": "",
"position": 317
},
{
"token": "elk",
"start_offset": 113,
"end_offset": 116,
"type": "",
"position": 418
},
{
"token": "rocks",
"start_offset": 117,
"end_offset": 122,
"type": "",
"position": 419
},
{
"token": "elasticsearch",
"start_offset": 123,
"end_offset": 136,
"type": "",
"position": 520
},
{
"token": "is",
"start_offset": 137,
"end_offset": 139,
"type": "",
"position": 521
},
{
"token": "rock",
"start_offset": 140,
"end_offset": 144,
"type": "",
"position": 522
},
{
"token": "solid",
"start_offset": 145,
"end_offset": 150,
"type": "",
"position": 523
}
]
}
POST /book4/_search
{
"suggest" : {
"my-suggestion" : {
"text" : "Elasticsearaach",
"term" : {
"field" : "passage",
"suggest_mode": "popular"
}
}
}
}{
"took": 26,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
},
"suggest": {
"my-suggestion": [
{
"text": "elasticsearaach",
"offset": 0,
"length": 15,
"options": [
{
"text": "elasticsearch",
"score": 0.84615386,
"freq": 3
}
]
}
]
}
}
POST _search
{
"suggest": {
"my-suggest-1" : {
"text" : "tring out Elasticsearch",
"term" : {
"field" : "message"
}
},
"my-suggest-2" : {
"text" : "kmichy",
"term" : {
"field" : "user"
}
}
}
}
term
建议者提出基于编辑距离条款。在建议术语之前分析提供的建议文本。建议的术语是根据分析的建议文本标记提供的。该term
建议者不走查询到的是是的请求部分。常见建议选项:
text
field
analyzer
size
sort
score
:先按分数排序,然后按文档频率排序,再按术语本身排序。
frequency
:首先按文档频率排序,然后按相似性分数排序,然后按术语本身排序。
suggest_mode
missing
:仅提供不在索引词典中,但是在原文档中的词。这是默认值。
popular
:仅提供在索引词典中出现的词语。
always
:索引词典中出没出现的词语都要给出建议。
其他术语建议选项:
lowercase_terms
max_edits
prefix_length
min_word_length
shard_size
size
选项返回前N个建议。默认为该 size
选项。将此值设置为高于该值的值size
可能非常有用,以便以性能为代价获得更准确的拼写更正文档频率。由于术语在分片之间被划分,因此拼写校正频率的分片级文档可能不准确。增加这些将使这些文档频率更精确。
max_inspections
shards_size
以便在碎片级别上检查更多候选拼写更正。可以以性能为代价提高准确性。默认为5。
min_doc_freq
max_term_freq
string_distance
internal
- 默认值基于damerau_levenshtein,但高度优化用于比较索引中术语的字符串距离。damerau_levenshtein
- 基于Damerau-Levenshtein算法的字符串距离算法。levenshtein
- 基于Levenshtein编辑距离算法的字符串距离算法。 jaro_winkler
- 基于Jaro-Winkler算法的字符串距离算法。 ngram
- 基于字符n-gram的字符串距离算法。
文章标题:Elasticsearch Suggester API(自动补全)
文章链接:http://soscw.com/index.php/essay/104569.html