我正在使用Elasticsearch Phrase Suggester来纠正用户的拼写错误。一切都像我预期的那样工作,除非用户输入了一个第一个字母拼写错误的查询。在这种情况下,短语suggester什么也不返回或返回意外的结果。
我对建议的疑问:
{
"suggest": {
"text": "user_query",
"simple_phrase": {
"phrase": {
"field": "title.phrase",,
"collate": {
"query": {
"inlile" : {
"bool": {
"should": [
{ "match": {"title": "{{suggestion}}"}},
{ "match": {"participants": "{{suggestion}}"}}
]
}
}
}
}
}
}
()}}
第一个字母拼写错误的示例:
"simple_phrase" : [
{
"text" : "گاشانچی",
"offset" : 0,
"length" : 11,
"options" : [ {
"text" : "گارانتی",
"score" : 0.00253151
}]
}
]
第五个字母拼写错误的示例:
"simple_phrase" : [
{
"text" : "کاشاوچی",
"offset" : 0,
"length" : 11,
"options" : [ {
"text" : "کاشانچی",
"score" : 0.1121
},
{
"text" : "کاشانجی",
"score" : 0.0021
},
{
"text" : "کاشنچی",
"score" : 0.0020
}]
}
]
我希望这两个拼写错误的查询有相同的建议(我的预期建议是第二个)。什么是错的?
P.S:我用这个功能为波斯语。
2条答案
按热度按时间rbpvctlc1#
我有解决你的问题的方法,只需要在你的模式中添加一些字段。
P.S:我没有太多的专业知识在ElasticSearch,但我已经解决了同样的问题使用solr,你可以实现同样的方式在ElasticSearch太
创建新的ngram字段,并复制ngram字段中的所有标题名称。
当你为missspell单词激发任何查询,你得到空白的结果,然后分割单词,并再次激发相同的查询,你会得到预期的结果。
我们已经将单词序列进行了拆分,并对字段ngram进行了查询。
希望能对你有所帮助。
gmxoilav2#
来自ElasticSearch文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-suggesters-phrase.html
前缀长度
必须符合的最少字首字符数,才能成为候选建议。预设值为1。增加此数字可改善拼字检查效能。通常拼字错误不会发生在字词的开头。(旧名称“prefix_len”已过时)
因此,默认情况下,phrase-sugester假定第一个字符是正确的,因为
prefix_length
的默认值是1。**注意:**将此值设置为0不是一个好方法,因为这会影响性能。您需要使用
reverse analyzer
我在这篇文章中解释了它,所以请去检查我的答案Elasticsearch拼写检查建议,即使第一个字母丢失关于重复项,您可以使用
skip_duplicates是否应过滤掉重复的建议(默认为false)。