Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户,以下案例版本为7.16.2,注意python环境安装的elasticsearch版本最好与es数据库版本一致,避免出现兼容性问题
目录:
1、测试样例说明
2、获取相似问embedding
3、索引表创建
4、数据更新导入案例
5、索引表信息查看
6、数据搜索查询
a、通过主键查新,get方法通过主键返回对应数据
b、完全匹配,term方法类似sql 的“=” terms类似sql的in
c、相似匹配,BM25
d、相似匹配加embedding点击排序
e、正则查询,该方法可用于搜索推荐
1、测试样例说明
测试样例是claud2生成的18个标准问,每个标准问有5个相似问,一共90条测试数据,标准问与相似问有均对应id,共四列数据
1 2 |
|
2、获取相似问embedding,这里以macbert为例子,需提前部署bert-seriving,获取similar_question的向量表征后,数据格式如下所示
1 2 3 4 5 6 7 8 |
|
3、索引表创建,需注意字段是否要设为索引或关键字,以及需要倒排索引的列名,向量维度等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
4、数据更新导入案例,这里以dataframe,其他数据格式同理,该方法采用update方法,存在则更新,不存在则新建,需注意主键字段
1 2 3 |
|
5、索引表信息查看
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
6、数据搜索查询
a、通过主键查新,get方法通过主键返回对应数据
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
b、完全匹配,term方法类似sql 的“=” terms类似sql的in
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
c、相似匹配,这里直接返回BM25得分最高的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
d、相似匹配加向量点积排序,注意这里的embedding需和入库时调用的embedding 服务为同一个模型,返回结果根据点积相似度降序排列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
e、正则查询,该方法可用于搜索推荐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|