搜索框文字自动补全功能怎样实现?

我们在网页上搜索内容时,常常会看到搜索框跳出与你输入的文字内容相关的搜索项,这个功能是怎么实现的呢?

需求说明:

当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图:

使用拼音分词

要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的拼音分词插件。地址:https://github.com/medcl/elasticsearch-analysis-pinyin

安装方式与IK分词器一样,分三步:

①解压

②上传到虚拟机中,elasticsearch的plugin目录

③重启elasticsearch

④测试

自定义分词器

elasticsearch中分词器(analyzer)的组成包含三部分:

character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符。

tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart。

tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等。

假设四级考试通过的心情,通过自定义分词器处理,大概是下面的展现形式:

我们可以在创建索引库时,通过settings来配置自定义的analyzer(分词器),创建代码如下:

拼音分词器适合在创建倒排索引的时候使用,但不能在搜索的时候使用。

创建倒排索引时:

因此字段在创建倒排索引时应该用my_analyzer分词器;字段在搜索时应该使用ik_smart分词器;

completion suggester查询

elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:

参与补全查询的字段必须是completion类型。

字段的内容一般是用来补全的多个词条形成的数组。completion suggester查询

completion suggester查询

查询语法如下:

注意:自动补全对字段的要求类型是completion类型,字段值是多词条的数组。

你可能感兴趣的:(搜索框文字自动补全功能怎样实现?)