elasticsearch的应用

关于索引Elasticsearch的应用

  1. 描述
    在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
    而这里我们要说的是另一种索引,即索引引擎:Lucene,它是apache的一款全文索引和搜寻的引擎,但由于其使用比较复杂,需要深入了解原理,故又延伸出一款更加易于应用的索引:elasticsearch,基于lucene,提供了restful api接口,更容易使用。相比于数据库,es更倾向于排序,模糊检索分词匹配,且效率更快,如果有这方便的需要,那么es是个很好的选择。
  2. 安装
    官网下载需要的版本与对应系统的安装包解压即可。
    配置:
    在这里插入图片描述
    其中cluster.name是集群的名称,node.name是节点的名称,http.port是对网页暴露的接口,而9300是对程序java代码暴露的端口。

注:非root用户才可以启动,故需要创建es的独立账户进行操作,add user xx即可。

  1. 启动
    配置结束后进入bin目录,启动服务:./elasticsearch -d
    在这里插入图片描述
    或者输入:curl localhost:9200指令,出现上述信息即为成功。

  2. 应用
    关于新版(>=6)和旧版(<6)在应用方面的区分还是有些大的。新版引入了模板的概念,索引操作会优先查询是否存在该模板。
    4.1新版以springboot集成elasticsearch为例:
    1)直接引入依赖:

    org.springframework.boot
    spring-boot-starter-data-elasticsearch

    2)配置索引名称、类型以及对应的实体类:
    @Data
    @Document(indexName = “test”, type = “test”)
    public class ESTest
    {
    private String id;
    private String content;
    private Integer difficulty;
    private Long createTime;
    private Long updateTime;
    }
    3)配置接口:
    public interface TestESRepository extends ElasticsearchRepository<ESTest, String>
    {
    }
    然后操作索引就是通过该接口来实现,主要的接口方法:
    @NoRepositoryBeanpublic interface ElasticsearchRepository<T, ID extends Serializable> extends ElasticsearchCrudRepository<T, ID> { S index(S entity);Iterable search(QueryBuilder query);Page search(QueryBuilder query, Pageable pageable);Page search(SearchQuery searchQuery);Page searchSimilar(T entity, String[] fields, Pageable pageable);void refresh();Class getEntityClass();}
    可以看见包含了基本的功能:index(创建、校验)、search(检索)等。
    虽然用起来很方便,但每个索引都要建立自己的一套实体与接口对象,如习惯了旧版本写代码方式来手动进行索引属性刷新设置,那么也完全可以通过code来实现:
    Settings settings = Settings.builder().
    put(“cluster.name”,clusterName)
    .put(“client.transport.sniff”, true)
    .build();
    client = new PreBuiltTransportClient(settings)
    .addTransportAddress(
    newTransportAddress(InetAddress.getByName(clustHost), clustPort)
    );
    IndicesAdminClient adminClient = client.admin().indices()
    初始化好属性,创建好client后,即可通过adminClient进行索引操作:exists、prepareExists、prepareCreate、preparePutMapping等等。
    【新】模板:
    模板的使用可以通过代码来指定,也可以通过在服务器配置索引的时候进行设置。
    a.代码实现索引模板配置:
    PutIndexTemplateRequest request = new PutIndexTemplateRequest("itembank");List indexPatterns = new ArrayList<>();indexPatterns.add("test*");request.patterns(indexPatterns);XContentBuilder jsonBuilder = XContentFactory.jsonBuilder().startObject().startObject("_source").field("enabled", false).endObject().startObject("properties").startObject("host_name").field("type", "keyword").endObject().startObject("created_at").field("type", "date").field("format", "yyyy-MM-dd HH:mm:ss").endObject().endObject().endObject();request.mapping("_doc", jsonBuilder);Map<String, Object> templateSettings = new HashMap<>();templateSettings.put("number_of_shards", 1);templateSettings.put("number_of_replicas", 0);request.settings(templateSettings);
    创建对应名称的模板,并设置一些参数属性,如indexPatterns中配置模板查询以test开头的为一类,以及类型、日期格式等等的设置,也可以根据喜好配置“order”来排序。
    新版es的config中移除了关于分片与副本的配置,改为模板中进行配置,故最主要的是在templateSetting中设置number_of _shards(分片)与 number_of_replicas(副本数)两个参数。
    b.将设置好的模板直接刷到索引中:
    在这里插入图片描述
    模板查询:
    在这里插入图片描述
    4.2旧版以常规maven服务集成elasticsearch为例:
    1)引入依赖
    在这里插入图片描述
    这里由于没有springboot集成好的es那么完美,所以要自行配置所需要的依赖。
    2)通过code进行设置:
    这里的code与上述新版code基本无差别,可以见上方code,其中
    client = new PreBuiltTransportClient(settings)
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(clustHost), clustPort)
    );
    使用的是InetSocketTransportAddress而非TransportAddress,且不用配置模板,其他关于索引的操作保持一致。

  3. 索引可视化工具
    对于可视化查询索引的工具有很多,应用比较广泛的有:elasticsearch-head与Kibana。
    相比较Kibana的功能繁多,且分析强大,es-head就显得简单的多,副本切片直接可见,可根据喜好进行选择,当然Kibana是ELK中强大的分析工具,如果只是简单可视化索引,还是es-head来得简单。
    Kibana:
    在这里插入图片描述
    elasticsearch-head:
    在这里插入图片描述
    在这里插入图片描述

  4. 分词器
    由于索引检索过程中需要针对单词进行查询,故分词就显得尤为重要,而ik分词器则可以更好的实现分词功能。
    安装:
    https://github.com/medcl/elasticsearch-analysis-ik
    githup中提供了不同版本es的分词插件提供选择。
    下载后解压放到es安装目录plugins目录下,建立ik文件夹,解压放进去:
    在这里插入图片描述
    然后启动es即可。

code源码:https://github.com/lovezmming/spring-development-projects/tree/master/item-bank
微信公众号:像是风
在这里插入图片描述

发布了10 篇原创文章 · 获赞 8 · 访问量 867

猜你喜欢

转载自blog.csdn.net/zmzmlla/article/details/103067860