一、docker安装Elasticsearch
1、docker pull elasticsearch:指定的版本号(不指定版本号即为最新的)
2、安装es容器
docker run -di --name=**** -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
name自己自定义,9200端口(Web管理平台端口) 9300(服务默认端口)
输入虚拟机地址访问9200页面:

3、配置:
3.1、登陆容器:docker exec -it 容器名 /bin/bash
3.2、进入config目录:

3.3、 查看文件 :

3.3.4、修改/etc/security/limits.conf 中的内容

3.3.5、修改/etc/sysctl.conf,追加下面内容
二、ElasticSearch的客户端操作
2.1、elasticsearch-head

5)进入elasticsearch-head-master目录启动head,在命令提示符下输入命令:

如果不能成功连接到es服务,需要修改ElasticSearch的config目录下的配置文件: config/elasticsearch.yml,增加以下两句命令:
http.cors.enabled: true
三、IK分词器
1、简介
2、安装
(2)测试

四、Kibana
1、下载安装

2、Kibana使用
1、DSL语句使用

(5)新增文档数据
PUT /user/userinfo/1
五、java代码操作:
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
@Before
public void init() throws Exception{
//1、配置setting
Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
//2、产生客户端
client=new PreBuiltTransportClient(settings);
//3、添加节点信息
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.110.128"),9300));
}
1、创建索引index :
@Test
//创建索引
2、创建映射mapping
@Test
public void setMappings()throws Exception {
XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.startObject("article")
.startObject("properties")
.startObject("id").field("type", "integer").field("store", "yes")
.endObject()
.startObject("title").field("type", "string").field("store", "yes").field("analyzer", "ik_smart")
.endObject()
.startObject("content").field("type", "string").field("store", "yes").field("analyzer", "ik_smart")
.endObject()
.endObject()
.endObject()
.endObject();}
3、建立文档document
@Test
public void createDoc() throws Exception {
//1、创建客户端,上面方法已经创建完毕
//2、创建一个文档对象
XContentBuilder builder=XContentFactory.jsonBuilder();
builder.startObject()
.field("id",2l)
.field("title","美好生活")
.field("content","好好努力才可以去追求想要的生活").endObject();
//3、将文档对象添加到索引库
client.prepareIndex()
.setIndex("esstudy")
.setType("article")
.setId("2")
.setSource(builder).get();
client.close();
}
4、查询:
共同点的代码:
@Before
public void init() throws Exception{
//1、配置setting
Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
//2、产生客户端
client=new PreBuiltTransportClient(settings);
//3、添加节点信息
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.110.128"),9300));
}
private void search(QueryBuilder queryBuilder) {
//2、执行查询
SearchResponse searchResponse = client.prepareSearch("esstudy")
.setTypes("article")
.setQuery(queryBuilder)
.get();
//3、取出查询结果
SearchHits searchHits = searchResponse.getHits();
//4、取出查询结果的总记录数
System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
//5、查询结果列表
Iterator<SearchHit> iterator = searchHits.iterator();
//6、遍历
while (iterator.hasNext()) {
SearchHit searchHit = iterator.next();
//打印文档对象
System.out.println(searchHit.getSourceAsString());
System.out.println("文档的属性");
Map<String, Object> document = searchHit.getSource();
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
client.close();
}
4.1、termQuery
@Test
public void termQuery() throws Exception{
//1、创建一个QueryBuilder对象
//参数1:要搜索的字段,参数2:要搜索的关键词
QueryBuilder queryBuilder = QueryBuilders.termQuery("title","女护士");
//2、执行查询
search(queryBuilder);
}
4.2、QueryString
@Test
public void queryString() throws Exception{
//1、创建一个QueryBuilder对象
//参数1:要搜索的字段,参数2:要搜索的关键词
QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("美丽的女护士").defaultField("title");
search(queryBuilder);
}
4.3、MatchQuery
@Test
public void matchQuery() throws Exception{
//1、创建一个QueryBuilder对象
//参数1:要搜索的字段,参数2:要搜索的关键词
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title","美丽的女护士");
//2、执行查询
search(queryBuilder);
}
4.4、查询文档分页操作
@Test public void testQueryMatchAllQuery() throws Exception {
//创建一个QueryBuilder对象
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
//执行查询
SearchResponse searchResponse = client.prepareSearch("esstudy")
.setTypes("article")
.setQuery(queryBuilder)
.setFrom(0)
.setSize(5)
.get();
//3、取出查询结果
SearchHits searchHits = searchResponse.getHits();
//4、取出查询结果的总记录数
System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
//5、查询结果列表
Iterator<SearchHit> iterator = searchHits.iterator();
//6、遍历
while (iterator.hasNext()) {
SearchHit searchHit = iterator.next();
//打印文档对象
System.out.println(searchHit.getSourceAsString());
System.out.println("文档的属性");
Map<String, Object> document = searchHit.getSource();
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
client.close();
}
六、Spring Data ElasticSearch
6.3、java
pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml:
spring:
data:
elasticsearch:
cluster-name: my-elasticsearch-----节点名
cluster-nodes: 虚拟机地址:9300
出了自带的CRUD方法外还有

案例:
实体类:
@Document(indexName ="wlm_ddd" ,type="article")------要创建的索引名和类型
public class Article {
@Id
@Field(type = FieldType.Long, store = true)
private long id;
@Field(type = FieldType.Text, store = true, analyzer = "ik_smart")
private String title;
@Field(type = FieldType.Text, store = true, analyzer = "ik_smart")
private String content;
.........
dao层:
public interface ArticleDao extends ElasticsearchRepository<Article,Long> {
public List<Article> findByTitle(String title);
public List<Article> findByTitleOrContent(String title,String content);
//分页查询
public List<Article> findByTitleOrContent(String title, String content, Pageable pageable);
}
测试(自带的crud方法和自己写的方法)
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test {
@Resource
private ArticleDao articleDao;
@Resource
private ElasticsearchTemplate template;
@org.junit.Test
public void createIndex(){
template.createIndex(Article.class);
}
@org.junit.Test
public void addDocument() throws Exception {
for (int i = 1; i <= 20; i++) { //创建一个Article对象
Article article = new Article();
article.setId(i);
article.setTitle("女护士路遇昏迷男子跪地抢救:救人是职责更是本能" + i);
article.setContent("这是一个美丽的女护士妹妹" + i);
//把文档写入索引库
articleDao.save(article);
}
}
@org.junit.Test
public void deleteDocumentById() throws Exception {
//articleDao.deleteById(2l);
//全部删除
articleDao.deleteAll();
}
@org.junit.Test
public void findAll() throws Exception {
Iterable<Article> articles = articleDao.findAll();
articles.forEach(a -> System.out.println(a));
}
@org.junit.Test
public void testFindById() throws Exception {
Optional<Article> optional = articleDao.findById(10l);
Article article = optional.get();
System.out.println(article);
}
@org.junit.Test
public void testFindByTitle() throws Exception {
List<Article> list = articleDao.findByTitle("美丽的护士");
list.stream().forEach(a -> System.out.println(a));
}
@org.junit.Test
public void testFindByTitleOrContent() throws Exception {
articleDao.findByTitleOrContent("美丽的女护士", "女护士").forEach(a -> System.out.println(a));
}
@org.junit.Test
public void testFindByTitleOrContent1() throws Exception {
Pageable pageable =PageRequest.of(1,5);
articleDao.findByTitleOrContent("美丽的女护士", "女护士",pageable).forEach(a -> System.out.println(a));
}
@org.junit.Test
public void testNativeSearchQuery() throws Exception {
//创建一个查询对象
NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("女护士").defaultField("title")).withPageable(PageRequest.of(0, 15)).build();
//执行查询
List<Article> articleList = template.queryForList(query, Article.class);
articleList.forEach(a -> System.out.println(a));
}
本文详细介绍了如何使用Docker安装Elasticsearch并配置相关参数,包括设置编辑器、修改配置文件等步骤。接着,讲解了Elasticsearch的客户端操作,如通过elasticsearch-head插件、RESTful接口和API访问。还介绍了IK分词器的安装和使用,以及Kibana的下载安装、访问测试和基本操作。最后,展示了使用Java代码操作Elasticsearch的示例,以及Spring Data Elasticsearch的简单应用。
2071

被折叠的 条评论
为什么被折叠?



