lucene 当第一个字母拼写错误时,短语sugester返回意外结果

bcs8qyzn  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(195)

我正在使用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:我用这个功能为波斯语。

rbpvctlc

rbpvctlc1#

我有解决你的问题的方法,只需要在你的模式中添加一些字段。

P.S:我没有太多的专业知识在ElasticSearch,但我已经解决了同样的问题使用solr,你可以实现同样的方式在ElasticSearch太

创建新的ngram字段,并复制ngram字段中的所有标题名称。
当你为missspell单词激发任何查询,你得到空白的结果,然后分割单词,并再次激发相同的查询,你会得到预期的结果。

Example : Suppose user searching for word Akshay but type it as Skshay, then 
create query in below way you will get results as expected hopefully.

I am here giving you solr example same way you can achieve it using 
elasticsearch.

**(ngram:"skshay" OR ngram:"sk" OR  ngram:"ks" OR ngram:"sh" OR ngram:"ha" ngram:"ay")**

我们已经将单词序列进行了拆分,并对字段ngram进行了查询。
希望能对你有所帮助。

gmxoilav

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)。

相关问题