我正在使用Elasticsearch词组建议程序来纠正用户的拼写错误。除非用户输入第一个字母拼写错误的查询,否则一切都会正常进行。在这种情况下,词组建议程序什么也不返回或返回意外结果。
我的文档和查询与phrase suggester的示例完全相同:
POST test/test?refresh=true
{"title": "noble warriors"}
POST test/test?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": "<em>",
"post_tag": "</em>"
}
}
}
}
}
第一个字母拼写错误的示例:
{
"_shards": ...
"hits": ...
"timed_out": false,
"took": 3,
"suggest": {
"simple_phrase" : [
{
"text" : "mobel prize",
"offset" : 0,
"length" : 11,
"options" : []
}
]
}
}
第四个字母拼写错误的示例:
{
"_shards": ...
"hits": ...
"timed_out": false,
"took": 3,
"suggest": {
"simple_phrase" : [
{
"text" : "noble prize",
"offset" : 0,
"length" : 11,
"options" : [ {
"text" : "nobel prize",
"highlighted": "<em>nobel</em> prize",
"score" : 0.5962314
}]
}
]
}
}
答案 0 :(得分:1)
更改生成器的前缀长度。
前缀长度
必须匹配的最小前缀字符数才能成为候选建议。默认值为1。增加此数字可提高拼写检查性能。通常,拼写错误不会出现在学期开始时。 (旧名称“ prefix_len”已弃用)
警告,通常将诸如此类的模糊匹配查询的前缀长度设置为零,这往往会对性能产生重大的负面影响。