elasticsearch模仿淘宝、京东、百度、谷歌搜索,自动补全、自动完成

本文介绍了如何利用Elasticsearch实现类似淘宝、京东、百度等搜索引擎的自动补全功能。通过实例展示了安装、配置、插入数据以及查询的过程,强调了中文、全拼、简拼的自动完成,并提供了简单的查询示例。

        Elasticsearch(简称es)是一款功能强大的开源分布式实时搜索引擎,在日志分析、企业级搜索、时序分析等领域有广泛应用,几乎是各大公司搜索分析引擎的开源首选方案。本文不讲废话,不谈理论,目的在于实现功能。

        现在的很多搜索引擎都具备了自动补全纠错的功能,我们熟悉的淘宝、京东、百度、谷歌等。本文主要介绍es在电商项目中的应用与实践,简单的介绍es的安装搭建方式,分词器的使用,主要介绍搜索过程自动补全(中文、全拼、简拼),多字段联合搜索,自动纠错的实现,本文采用es6.6.2,

我们输入“华为手机”,“huaweishouji”,“hwsj”,“huawei手机”,“华为shouji”,“hua为shou机”,都可以出现自动完成提示如下

 

安装elasticsearch的步骤以及分词器插件就省略了,如有问题请联系作者获取打包好的安装软件,加微信RR-sasa,备注csdn-es

一、配置

PUT /item 
{
"settings":{
  "index": {
    "number_of_shards": 1,
    "number_of_replicas" : 0,
    "analysis": {
      "analyzer": {
        "default": {
          "tokenizer": "ik_max_word"
        },
        "pinyin_analyzer": {
          "tokenizer": "shopmall_pinyin"
        },
        "first_py_letter_analyzer": {
          "tokenizer": "first_py_letter"
        },
        "full_pinyin_letter_analyzer": {
          "tokenizer": "full_pinyin_letter"
        }
      },
      "tokenizer": {
        "shopmall_pinyin": {
          "keep_joined_full_pinyin": "true",
          "keep_first_letter": "true",
          "keep_separate_first_letter": "false",
          "lowercase": "true",
          "type": "pinyin",
          "limit_first_letter_length": "16",
          "keep_original": "true",
          "keep_full_pinyin": "true",
          "keep_none_chinese_in_joined_full_pinyin": "true"
        },
        "first_py_letter": {
          "type": "pinyin",
          "keep_first_letter": true,
          "keep_full_pinyin": false,
          "keep_original": false,
          "limit_first_letter_length": 16,
          "lowercase": true,
          "trim_whitespace": true,
          "keep_none_chinese_in_first_letter": false,
          "none_chinese_pinyin_tokenize": false,
          "keep_none_chinese": true,
          "keep_none_chinese_in_joined_full_pinyin": true
        },
        "full_pinyin_letter": {
          "type": "pinyin",
          "keep_separate_first_letter": false,
          "keep_full_pinyin": false,
          "keep_original": false,
          "limit_first_letter_length": 16,
          "lowercase": true,
          "keep_first_letter": false,
          "keep_none_chinese_in_first_letter": false,
          "none_chinese_pinyin_tokenize": false,
          "keep_none_chinese": true,
          "keep_joined_full_pinyin": true,
          "keep_none_chinese_in_joined_full_pinyin": true
        }
      }
    }
  }
}
,
"mappings":{
  "itemdocs": {
    "properties": {
      "title": {
        "type": "completion",
        "fields": {
          "pinyin": {
            "type": "completion",
            "analyzer": "pinyin_analyzer"
          },
          "keyword_pinyin": {
            "type": "completion",
            "analyzer": "full_pinyin_letter_analyzer"
          },
          "keyword_first_py": {
            "type": "completion",
            "analyzer": "first_py_letter_analyzer"
          }
        }
      }
    }
  }
}
}

二、插入数据


PUT /item/itemdocs/1
{
  "groupId":1335,
  "title":"华为手机p40星空灰"
}

PUT /item/itemdocs/2
{
  "groupId":1335,
  "title":"华为手机mate40樱粉金"
}

PUT /item/itemdocs/3
{
  "groupId":1335,
  "title":"华为手机nova8全面屏"
}

PUT /item/itemdocs/4
{
  "groupId":1335,
  "title":"华为手机nova7高清拍照"
}

三、查询

GET /item/itemdocs/_search
{
    "from": 0,
    "size": 10,
    "suggest": {
        "my-suggest-1": {
            "text": "hua",
            "completion": {
                "field": "title.keyword_pinyin",
                "size": 100
            }
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值