elasticsearch在项目中的使用

IK分词器

IK ANALYZE:分析=分词的过程:字符过滤器(过滤特殊符号外加量词,的,stopword停用词)-》字符处理(词库词典)-》分词过滤(分词转换,词干转化)

1.下载
https://github.com/medcl/elasticsearch-analysis-ik/releases
注意: IK分词器插件版本必须和Elasticsearch版本一致

2、安装
进入lib目录,将下载好的文件放入

然后进入kibana检查

  • 智能分词

在这里插入图片描述

  • 最大化分词
    贪心算法

在这里插入图片描述
#analyzer指定的是构建索引的时候分词
#search_analyzer指定的是搜索关键字时候的分词

最佳方案

索引的时候使用max_word,但是查询的时候使用smartword

点评搜索索引定义

定义字段逻辑
定义字段类型
定义字段analyzer

//定义门店索引结构
PUT /shop
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "id":{"type":"integer"},
      "name":{"type":"text","analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"},
      "tags":{"type":"text","analyzer": "whitespace","fielddata":true},
      "location":{"type": "geo_point"},
      "remark_score":{"type": "double"},
      "price_per_man":{"type": "integer"},
      "category_id":{"type": "integer"},
      "category_name":{"type": "keyword"},
      "seller_id":{"type": "integer"},
      "seller_remark_score":{"type": "double"},
      "seller_disabled_flag":{"type": "integer"}
    }
  }
}

与数据库的字段相对应
在这里插入图片描述
可以说是将之前的关系型数据库融入到一张表上

logstash-input-jdbc

在我们elk组件当中承担了日志收集这一功能

本质思想(管道作用)

在这里插入图片描述

没有追求强一致,尽量减少io操作和最大化一致

配置

在这里插入图片描述
在数据库中执行一下这个sql语句
在这里插入图片描述
和我们对应的es中建立的索引一致

进入bin目录E:\logstash-7.11.1\bin>logstash -f mysql/jdbc.conf
输入此命令启动在这里插入图片描述

最后会出现这些与数据库有关的

使用get可以看到我们门店的信息已经进去了
在这里插入图片描述
以上是全量索引构建

再构建一个增量索引以时间轴为增量

索引

自定义一个索引
包含我们想要的打分规则

#使用function score解决排序模型
GET /shop/_search
{
  "_source":"*",
  "script_fields": {
    "distance": {
      "script": {
        "source": "haversin(lat,lon,doc['location'].lat,doc['location'].lon)", 
        "lang": "expression",
        "params": {"lat":31.37,
                    "lon":127.12}
      }
    }
  },
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {"match": {"name": {"query":"凯悦","boost": 0.1}}},
            {"term":{"seller_disabled_flag": 0}}
          ]
        }
      },
      "functions": [
        {
          "gauss": {
            "location": {
              "origin": "31.23916171,121.48789949",
              "scale": "100km",
              "offset": "0km",
              "decay": 0.5
            }
          },
          "weight": 9
        },
        {
          "field_value_factor": {
            "field": "remark_score"
          },
          "weight": 0.2
        },
        {
          "field_value_factor": {
            "field": "seller_remark_score"
          },
          "weight": 0.1
        }
      ],
      "score_mode": "sum",
      "boost_mode": "sum"
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}


java代码接入

  • Node接入node client
    Node接入就是将java程序看成一个node节点,所以是最重量级的一种方式
  • Transport接入 transport client
    transport相对来说就不是那么重量级,一般是通过各个节点的9300端口来进行信息交互,5.x之前使用比较多
  • Http接入 rest client
    这个方式只需要连接任意一个节点,发送http请求就可以进行交互,不需要感知网络拓扑中节点状态

推荐方法三在这里插入图片描述

导入包

 <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.11.1</version>
        </dependency>

在application.properties中配置
// 声明es服务地址
elasticsearch.ip=127.0.0.1:9200

然后写一个配置类接入es

package com.imooc.dianping.config;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientAutoConfiguration.RestHighLevelClientConfiguration;

import org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.elasticsearch.client.RestClient;



@Configuration
public class ElasticsearchRestClient {

    @Value("${elasticsearch.ip}")
    String ipAddress;

    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(){
        String [] address = ipAddress.split(":");
        String ip = address[0];
        int port = Integer.valueOf(address[1]);
        HttpHost httpHost = new HttpHost(ip,port,"http");
        return new RestHighLevelClient(RestClient.builder(new HttpHost[]{httpHost}));
    }
}

然后重写shopserver中search的业务

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Elasticsearch项目的详细使用流程可以概括如下: 1. 安装和配置Elasticsearch: - 下载并安装Elasticsearch,可以选择适合的版本和操作系统。 - 配置Elasticsearch的相关参数,如集群名称、节点名称、数据存储路径等。 2. 数据准备和索引设计: - 准备需要搜索和分析的数据,并设计好索引结构,包括字段映射、分词器、分析器等。 - 使用Elasticsearch的API或者命令行工具创建索引,并定义相关的映射和设置。 3. 数据导入和索引操作: - 使用Elasticsearch提供的API或者客户端库将数据导入到索引,可以批量导入或者逐条导入。 - 可以使用批量操作API来提高导入效率,如Bulk API。 4. 搜索和查询: - 使用Elasticsearch的搜索API来执行各种查询操作,如全文搜索、过滤、范围查询等。 - 可以使用查询DSL(Domain Specific Language)来构建复杂的查询语句。 5. 结果展示和分析: - 解析和处理Elasticsearch返回的搜索结果,获取所需的数据。 - 可以对搜索结果进行排序、分页、聚合等操作,以满足具体的需求。 6. 监控和调优: - 使用Elasticsearch提供的监控工具和API来监控集群的健康状态、性能指标等。 - 根据监控数据进行调优,如调整索引设置、增加或减少节点等。 7. 容灾和备份: - 配置Elasticsearch的集群复制和故障转移机制,以确保数据的可用性和容灾能力。 - 定期备份索引数据,以防止数据丢失或损坏。 8. 安全和权限控制: - 配置Elasticsearch的安全功能,如访问控制、用户认证、SSL/TLS加密等,以保护数据的安全性。 以上是Elasticsearch项目的一般使用流程,具体的实现细节和操作方式会根据项目需求和使用场景来确定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值