热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

全文检索及ES学习笔记

上一篇学习了lucene原理及简单的使用.这次基于lucene上学习一下ES的使用.之前在linux上部署过ES(之前的文章有部署流程),然后今天启动发现启动不起来,报错Nofa

上一篇学习了lucene原理及简单的使用.这次基于lucene上学习一下ES的使用.

之前在linux上部署过ES(之前的文章有部署流程),然后今天启动发现启动不起来,报错
No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender

于是搜了一下,ES启动报错No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender

是因为之前以root的身份进入log文件导致文件权限变成了root权限
在这里插入图片描述将文件权限修改一下即可
执行命令: chown yyy[我的用户名] xxx.log
修改完后启动正常了.


ES集群:

创建es-clutser文件夹,在内部复制三个ES服务.
然后分别修改每个ES服务中elasticsearch-cluster\node*\config\elasticsearch.yml配置文件:


node1节点:

#节点1的配置信息:
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称,必须不一样
node.name: node-1
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9200
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9300
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9300”,“127.0.0.1:9301”,“127.0.0.1:9302”]


node2节点:

#节点2的配置信息:
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称,必须不一样
node.name: node-2
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9201
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9301
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9300”,“127.0.0.1:9301”,“127.0.0.1:9302”]


node3节点:

#节点3的配置信息:
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称,必须不一样
node.name: node-3
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9202
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9302
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9300”,“127.0.0.1:9301”,“127.0.0.1:9302”]

然后依次启动各个节点服务器.


ES使用(通过SpringDataES):

环境搭建
:
xml配置:



entity:

package com.ceeemall.es.entity;import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;@Document(indexName = "test",type="article") //索引库名称 类型名称
public class Article {@Id //主键标识@Field(type = FieldType.Long,store = true) //type 数据类型 store 是否存储private long id;@Field(type = FieldType.text,store = true,analyzer = "ik_max_word")private String title;@Field(type = FieldType.text,store = true,analyzer = "ik_max_word") //analyzer 分词器 使用ikprivate String content;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}

操作:
索引库的操作:

package com.ceeemall.es;import com.ceeemall.es.entity.Article;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpEsTest {@Autowiredprivate ElasticsearchTemplate template;@Testpublic void creatIndex(){//初始化spring容器//ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");//从容器中获取ElasticsearchTemplate对象// ElasticsearchTemplate template = applicationContext.getBean(ElasticsearchTemplate.class);//通过template对象创建索引库,指定entity可以基于entity创建索引库template.createIndex(Article.class);}//删除索引库@Testpublic void deleteIndex(){template.deleteIndex("test");}//设置mapping@Testpublic void putMapping(){template.putMapping(Article.class);}}

文档的操作:

定义dao:

package com.ceeemall.es.dao;import com.ceeemall.es.entity.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchCrudRepository;public interface ArticleDao extends ElasticsearchCrudRepository {}

添加文档:

//添加文档@Testpublic void addDocument(){Article article = new Article();article.setId(1);article.setTitle("你好,我是title");article.setContent("你好,我是content");//添加文档articleDao.save(article);}

添加成功:
在这里插入图片描述

删改就不说了,就是delete和save方法.

查询:
通过id查询:

@Testpublic void findById(){//返回optional对象Optional

optional = articleDao.findById(1L);//判断optional中是否有值if (optional.isPresent()){Article article = optional.get();System.out.println(article);}}

查询所有:

@Testpublic void findAll(){Iterable

all = articleDao.findAll();for (Article article : all) {System.out.println(article);}}

传入page对象可以实现分页查询.

条件查询:
使用findBy+ 查询字段的名称,参数中就是查询的条件:

dao:

public interface ArticleDao extends ElasticsearchCrudRepository {List

findByTitle(String title); }

@Testpublic void findByTitle(){List

articles = articleDao.findByTitle("title");for (Article article : articles) {System.out.println(article);}}

也可添加pageable实现分页

queryString查询:
需要使用原生的查询条件查询,通过NativeSearchQuery创建查询条件,查询时使用estemplate查询.

@Testpublic void finfByQueryString(){//创建原生查询条件NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder().//查询条件withQuery(QueryBuilders.queryStringQuery("你好")//设置默认查询字段.defaultField("content")).build();//通过estemplate对象执行查询List

articles = template.queryForList(nativeSearchQuery, Article.class);for (Article article : articles) {System.out.println(article);}}

推荐阅读
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 增加Maven构建profile配置在项目最顶层的pom.xml添加common和release两个profile,并声明${app.run.env}作为环境切换变量<profiles> ... [详细]
  • 20210317 springboot yml文件mabatis、druid,完整配置:
    springbootyml文件mabatis、druid,完整配置:spring:datasource:username:rootpassword:12 ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • springboot dubbo框架中log4j与slf4jlog4j12日志冲突问题的解决方法
    在基于springboot开发项目中,使用dubbo的RPC框架进行业务拆分,出 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 在Java应用程序中调用`response.getStatus()`方法时遇到了`NoSuchMethodError`异常,经过分析,初步判断为依赖冲突问题。通过检查项目依赖树发现,当前项目版本与某些库的版本不兼容,导致该方法无法被正确识别。建议通过更新相关依赖版本或使用依赖管理工具(如Maven或Gradle)来解决此问题,确保所有依赖项版本一致且兼容。 ... [详细]
  • Mybatis_04日志
    前几天临近期末考试,一直在准备考试,吐槽一下,这个学期的考试真是全背书,服了,背吐了。考完试到元旦又放肆了几天 ... [详细]
  • MQ的使用
    安装环境:linuxredhatactivemq版本:5.8.01.从http:activemq.apache.orgdownload.html地址下载 ... [详细]
  • Hbase 的伪分布部署、shell基本操作及hbase相关理念
    1,HBase的的的的伪分布式配置-对zookeeper的配置,这个前面配置过,修改zoo.cfg文件,指定zookeeper的主入口-配置的HBase的的:进入optmo ... [详细]
  • POI编程
    POI编程1简介在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
author-avatar
小猪朱一凡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有