读《深入理解Elasticsearch》点滴-改正用户拼写错误

1、使用“建议”的方法:在query body的json结构体中,增加suggest节点;或者使用特殊的REST端点

2、es自带有多个不同的suggest实现,用来纠正用户的拼写错误及创建自动补全等功能

3、如果索引中文档较少,则可能找不到合适建议的结果

4、有三种那个suggester:term suggester,phrase suggester,complete suggester(自动完成)

5、使用suggest REST端点

POST 'localhost:9200/myindex/_suggest?pretty'
{
"first_suggestion":{
    "test":"world war ii",
    "term":{
        "field":"_all"
    }
  },
"second_suggestion":{
   "text":"raceing",
   "term":{
      "field":"text"
  }
}
}

查询后将返回建议列表

6、在查询请求中包含建议请求

POST ‘localhost:9200/myindex/_search?pretty'
{
  "query":{
     "match_all":{}
  },
  "suggest":{
  "first_suggestion":{
    "text":"wordl war ii",
    "term":{
     "field":"_all"
    }
   },
  "second_suggestion":{
    "text":"wordl war ii",
    "term":{
     "field":"_all"
    }
   }
} }

查询结果包括了“查询结果、建议结果”
7、事实上,term suggester 基于编辑距离来运作。这意味着,加一次通过增删改某些字符转化为原词所改动的字符数越少,它越有可能是最佳选择。距离worl转化为work,改动了一个字符,因此编辑距离为1.当然,suggester的text文本需要先经过分词转化为词项。对原始输入句子的每个词都给出建议列表。

8、term suggester的通用配置选项

  • text:原始输入,有错误的问题
  • field:制定产生建议的字段
  • analyzer:
  • size:每个词项的最大建议词数量,默认5
  • sort:
  • suggest_mode:可用3个“missing、popular、always”。默认值missing,要求es对text参数的词项做一个区分对待,如果该词项不存在于索引中,则返回建议词,否则,不返回;如果取值为“popu lar”,则es在生成建议词做一个判断,如果建议词比原词更受欢迎,则返回,否则不返回。如果取值为“always”,指为每个text中的每个词生成建议词。
  • 其他配置参数

9、phrase suggester:基于n-gram方法将索引中词项切分成gram。举例,如果将单词“mastering”采用bi-bigrams方法切分,则切分结果为:ma as st te er ri in ng

10、phrase suggester支持高亮配置

11、completion suggester 自动完成:es设计者们决定在索引过程中创建类似FST的数据结构,并把它存储在索引中,需要的时候可以加载进内存

12、为了使用使用基于前缀的suggester,我们需要在定义mappings时,某个字段使用“completion”类型的字段来索引数据。

13、如果使用自动完成功能,其类型是强制提供的,必须是complete。

14、请记住payload必须是一个json对象,{"books":["1234","3243"]}

 

posted on 2018-03-20 20:35  手握太阳  阅读(387)  评论(0编辑  收藏  举报

导航