爱站网关键词查询,怎么免费做网站教程,军事网站模板,正国级领导有几位接上篇《8、RestClient操作索引库-基础介绍及导入demo》 上一篇我们介绍了RestClient的基础#xff0c;并导入了使用Java语言编写的RestClient程序Demo以及将要分析的数据库。本篇我们就要分析导入的宾馆数据库tb_hotel表结构的具体含义#xff0c;并分析如何建立其索引库。 …接上篇《8、RestClient操作索引库-基础介绍及导入demo》 上一篇我们介绍了RestClient的基础并导入了使用Java语言编写的RestClient程序Demo以及将要分析的数据库。本篇我们就要分析导入的宾馆数据库tb_hotel表结构的具体含义并分析如何建立其索引库。
一、分析前需要考虑的问题
我们如果想要建立索引库必须要考虑以下问题 问题一索引库中的字段名、数据类型 问题二哪些字段参与搜索、哪些字段进行分词 问题三如果分词分词器是什么? 带着这些疑问我们来分析tb_hotel表结构 大致看一下上面这个表结构可以初步回答三个问题 先说问题一上面这个表里面的字段名和字段类型其实就是我们将要建立索引库的字段名和类型当然不一定是所有的字段这个可以根据需要参与搜索的建议全部加入。 再说问题二哪些字段参与搜索哪些字段进行分词这俩问题其实跟业务场景息息相关现在的场景确定是一个酒店业务那么“酒店名称”这个字段一定是要参与搜索的且因为酒店名称比较长且可能带有一些关键词所以这里肯定也需要进行分词。 然后是问题三用什么分词器这里我们先卖个关子最后再说。
二、分析数据库字段
我们下面逐个分析每个字段如何对应创建我们的索引库。
1、酒店idid
这个是酒店数据的唯一标识主键也可以作为我们索引库的唯一标识所以这个字段是需要加入mapping索引库的mysql中该字段为PROMARY KEY是一个表的主键不用分词所以我们在索引库中就可以定义为keyword精确值类型。
id:{type:keyword}
因为是一个唯一标识且是纯数字这里我们不对它进行分词。
2、酒店名称name
这个上面咱们已经说过是一个重点字段它在mysql中是varchar类型在mapping索引库中可以这是为text类型因为需要分词因为该字段是需要参与搜索的所以要添加“analyzer”分词器属性指定分词器为“ik_max_word”
name:{type:text,analyzer:ik_max_word}
这里分词器为啥要选“ik_max_word”呢这里我们解释一下以下是常见的分词器表 因为我们需要检索和分析的是中文名称或文档内容最适合的分词器应该是“Chinese Analyzer”。而ik_max_word属于Chinese Analyzer中文分词器的一种分词模式。IK分词器是Elasticsearch中常用的中文分词插件它提供了两种分词模式ik_max_word和ik_smart。其中
1ik_max_word
●功能将文本进行最细粒度的拆分即将文本最大程度地切分成独立的词汇。 ●特点通过条件随机场CRF模型识别词汇边界并使用动态规划寻找最优的词段划分从而穷尽各种可能的词汇组合。 ●应用场景适用于需要更全面的分词结果以便在索引时捕捉到更多的词汇信息提高搜索的召回率。例如在搜索引擎或信息检索系统中可以使用ik_max_word模式来最大化地将文章内容分词以便在搜索时能够匹配到更多的相关结果。
2ik_smart
●功能对文本进行智能分词结合理解歧义和未知词的算法对文本进行词典分词的同时智能识别词汇的边界。 ●特点更注重分词的准确性和歧义处理词典中的词汇边界会被优先考虑从而可能减少不必要的扩展。 ●应用场景适用于需要更精确的分词结果以便在搜索时能够更准确地匹配到用户查询的意图。例如在搜索引擎中可以使用ik_smart模式来更精确地搜索到用户想要的结果。 概括起来ik_max_word是IK分词器中用于中文文本细粒度分词的一种模式适用于需要提高搜索召回率的场景。 所以我们选择了“ik_max_word”分词器。
3、酒店地址address等其他字段
这里我们不再一一赘述将其他字段逐个分析后我列出了相关表格 这里我们只介绍一个字段就是location回头我们查询酒店具体的坐标的时候需要将经纬度合并计算出精确位置此时我们使用的索引库类型就是geo_point类型。这个geo_point类型是Elasticsearch中用于表示地理位置坐标的特殊数据类型它通过支持空间查询、地理位置分析、空间索引等功能为基于地理位置的应用和服务提供了强大的支持。将经纬度组合成一个字段时在索引库中使用geo_point类型可以充分利用这些功能提高应用的性能和用户体验。
三、创建索引库语句
按照上面的分析最终的mapping索引库的DSL建表语句如下
# 酒店的mapping索引库
PUT /hotel
{mappings: {properties: {id: { type: keyword },name: { type: text, analyzer: ik_max_word },address: { type: text, analyzer: ik_max_word },price: { type: integer },score: { type: integer },brand: { type: keyword },city: { type: keyword },star_name: { type: keyword },business: { type: text, analyzer: ik_max_word}, location: { type: geo_point },pic: { type: keyword, index: false } }}
}
我们打开Kibana界面输入上述语句创建索引库并执行 查询索引库发现已经新增成功
至此我们对tb_hotel表结构的具体含义以及做索引需要考虑的具体问题就讲解完毕了并编写了DSL语句并执行完毕。下一篇我们来进行java代码的编写初始化RestClient并执行一些命令来操作索引库。
参考《黑马Elasticsearch全套教程》
转载请注明出处https://blog.csdn.net/acmman/article/details/146140551