Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sfewfsaf
spring-boot-examples
提交
758102ec
S
spring-boot-examples
项目概览
sfewfsaf
/
spring-boot-examples
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-boot-examples
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
758102ec
编写于
4月 04, 2019
作者:
微笑很纯洁
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add elasticsearch example
上级
4dbdb964
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
366 addition
and
0 deletion
+366
-0
spring-boot-elasticsearch/pom.xml
spring-boot-elasticsearch/pom.xml
+47
-0
spring-boot-elasticsearch/src/main/java/com/neo/ElasticsearchApplication.java
...earch/src/main/java/com/neo/ElasticsearchApplication.java
+12
-0
spring-boot-elasticsearch/src/main/java/com/neo/model/Customer.java
...t-elasticsearch/src/main/java/com/neo/model/Customer.java
+71
-0
spring-boot-elasticsearch/src/main/java/com/neo/repository/CustomerRepository.java
.../src/main/java/com/neo/repository/CustomerRepository.java
+19
-0
spring-boot-elasticsearch/src/main/java/com/neo/service/CustomersInterface.java
...rch/src/main/java/com/neo/service/CustomersInterface.java
+12
-0
spring-boot-elasticsearch/src/main/java/com/neo/service/impl/CustomersInterfaceImpl.java
...ain/java/com/neo/service/impl/CustomersInterfaceImpl.java
+50
-0
spring-boot-elasticsearch/src/main/resources/application.properties
...t-elasticsearch/src/main/resources/application.properties
+2
-0
spring-boot-elasticsearch/src/test/java/com/neo/ElasticsearchApplicationTests.java
.../src/test/java/com/neo/ElasticsearchApplicationTests.java
+18
-0
spring-boot-elasticsearch/src/test/java/com/neo/repository/CustomerRepositoryTest.java
.../test/java/com/neo/repository/CustomerRepositoryTest.java
+135
-0
未找到文件。
spring-boot-elasticsearch/pom.xml
0 → 100644
浏览文件 @
758102ec
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.neo
</groupId>
<artifactId>
spring-boot-elasticsearch
</artifactId>
<version>
1.0
</version>
<packaging>
jar
</packaging>
<name>
spring-boot-elasticsearch
</name>
<description>
Demo project for Spring Boot
</description>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.1.0.RELEASE
</version>
</parent>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<java.version>
1.8
</java.version>
</properties>
<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>
</project>
spring-boot-elasticsearch/src/main/java/com/neo/ElasticsearchApplication.java
0 → 100644
浏览文件 @
758102ec
package
com.neo
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
ElasticsearchApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
ElasticsearchApplication
.
class
,
args
);
}
}
spring-boot-elasticsearch/src/main/java/com/neo/model/Customer.java
0 → 100644
浏览文件 @
758102ec
package
com.neo.model
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.elasticsearch.annotations.Document
;
import
org.springframework.data.elasticsearch.annotations.Field
;
@Document
(
indexName
=
"customer"
,
type
=
"customer"
,
shards
=
1
,
replicas
=
0
,
refreshInterval
=
"-1"
)
public
class
Customer
{
//Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询
@Id
private
String
id
;
private
String
userName
;
private
String
address
;
private
int
age
;
public
Customer
()
{
}
public
Customer
(
String
userName
,
String
address
,
int
age
)
{
this
.
userName
=
userName
;
this
.
address
=
address
;
this
.
age
=
age
;
}
public
String
getId
()
{
return
this
.
id
;
}
public
void
setId
(
String
id
)
{
this
.
id
=
id
;
}
public
String
getUserName
()
{
return
userName
;
}
public
void
setUserName
(
String
userName
)
{
this
.
userName
=
userName
;
}
public
String
getAddress
()
{
return
address
;
}
public
int
getAge
()
{
return
age
;
}
public
void
setAge
(
int
age
)
{
this
.
age
=
age
;
}
public
void
setAddress
(
String
address
)
{
this
.
address
=
address
;
}
@Override
public
String
toString
()
{
return
"Customer{"
+
"id='"
+
id
+
'\''
+
", userName='"
+
userName
+
'\''
+
", address='"
+
address
+
'\''
+
", age="
+
age
+
'}'
;
}
}
spring-boot-elasticsearch/src/main/java/com/neo/repository/CustomerRepository.java
0 → 100644
浏览文件 @
758102ec
package
com.neo.repository
;
import
com.neo.model.Customer
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.elasticsearch.repository.ElasticsearchRepository
;
import
java.util.List
;
public
interface
CustomerRepository
extends
ElasticsearchRepository
<
Customer
,
String
>
{
public
List
<
Customer
>
findByAddress
(
String
address
);
public
Customer
findByUserName
(
String
userName
);
public
int
deleteByUserName
(
String
userName
);
public
Page
<
Customer
>
findByAddress
(
String
address
,
Pageable
pageable
);
}
spring-boot-elasticsearch/src/main/java/com/neo/service/CustomersInterface.java
0 → 100644
浏览文件 @
758102ec
package
com.neo.service
;
import
com.neo.model.Customer
;
import
java.util.List
;
public
interface
CustomersInterface
{
public
List
<
Customer
>
searchCity
(
Integer
pageNumber
,
Integer
pageSize
,
String
searchContent
);
}
spring-boot-elasticsearch/src/main/java/com/neo/service/impl/CustomersInterfaceImpl.java
0 → 100644
浏览文件 @
758102ec
package
com.neo.service.impl
;
import
com.neo.model.Customer
;
import
com.neo.repository.CustomerRepository
;
import
com.neo.service.CustomersInterface
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder
;
import
org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
;
import
org.springframework.data.elasticsearch.core.query.SearchQuery
;
import
java.util.List
;
public
class
CustomersInterfaceImpl
implements
CustomersInterface
{
Logger
logger
=
LoggerFactory
.
getLogger
(
this
.
getClass
());
@Autowired
private
CustomerRepository
customerRepository
;
@Override
public
List
<
Customer
>
searchCity
(
Integer
pageNumber
,
Integer
pageSize
,
String
searchContent
)
{
/* // 分页参数
Pageable pageable = new PageRequest(pageNumber, pageSize);
// Function Score Query
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery()
.add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("cityname", searchContent)),
ScoreFunctionBuilders.weightFactorFunction(1000))
.add(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("description", searchContent)),
ScoreFunctionBuilders.weightFactorFunction(100));
// 创建搜索 DSL 查询
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withPageable(pageable)
.withQuery(functionScoreQueryBuilder).build();
logger.info("\n searchCity(): searchContent [" + searchContent + "] \n DSL = \n " + searchQuery.getQuery().toString());
Page<Customer> searchPageResults = customerRepository.search(searchQuery);
return searchPageResults.getContent();
*/
return
null
;
}
}
spring-boot-elasticsearch/src/main/resources/application.properties
0 → 100644
浏览文件 @
758102ec
spring.data.elasticsearch.cluster-name
=
es-mongodb
spring.data.elasticsearch.cluster-nodes
=
192.168.0.53:9300
\ No newline at end of file
spring-boot-elasticsearch/src/test/java/com/neo/ElasticsearchApplicationTests.java
0 → 100644
浏览文件 @
758102ec
package
com.neo
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.junit4.SpringRunner
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
public
class
ElasticsearchApplicationTests
{
@Test
public
void
contextLoads
()
{
System
.
out
.
println
(
"Spring Boot Test"
);
}
}
spring-boot-elasticsearch/src/test/java/com/neo/repository/CustomerRepositoryTest.java
0 → 100644
浏览文件 @
758102ec
package
com.neo.repository
;
import
com.neo.model.Customer
;
import
org.elasticsearch.action.search.SearchResponse
;
import
org.elasticsearch.index.query.QueryBuilder
;
import
org.elasticsearch.index.query.QueryBuilders
;
import
org.elasticsearch.search.aggregations.Aggregation
;
import
org.elasticsearch.search.aggregations.AggregationBuilders
;
import
org.elasticsearch.search.aggregations.Aggregations
;
import
org.elasticsearch.search.aggregations.metrics.sum.InternalSum
;
import
org.elasticsearch.search.aggregations.metrics.sum.SumAggregationBuilder
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.data.domain.Page
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.elasticsearch.core.ElasticsearchTemplate
;
import
org.springframework.data.elasticsearch.core.ResultsExtractor
;
import
org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder
;
import
org.springframework.data.elasticsearch.core.query.SearchQuery
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.List
;
import
java.util.Map
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
public
class
CustomerRepositoryTest
{
@Autowired
private
CustomerRepository
repository
;
@Autowired
private
ElasticsearchTemplate
elasticsearchTemplate
;
@Test
public
void
saveCustomers
()
{
repository
.
save
(
new
Customer
(
"Alice"
,
"北京"
,
13
));
repository
.
save
(
new
Customer
(
"Bob"
,
"北京"
,
23
));
repository
.
save
(
new
Customer
(
"neo"
,
"西安"
,
30
));
repository
.
save
(
new
Customer
(
"summer"
,
"烟台"
,
22
));
}
@Test
public
void
fetchAllCustomers
()
{
System
.
out
.
println
(
"Customers found with findAll():"
);
System
.
out
.
println
(
"-------------------------------"
);
Iterable
<
Customer
>
iterable
=
repository
.
findAll
();
for
(
Customer
customer
:
iterable
)
{
System
.
out
.
println
(
customer
);
}
}
@Test
public
void
deleteCustomers
()
{
repository
.
deleteAll
();
// repository.deleteByUserName("neo");
}
@Test
public
void
updateCustomers
()
{
Customer
customer
=
repository
.
findByUserName
(
"summer"
);
System
.
out
.
println
(
customer
);
customer
.
setAddress
(
"北京市海淀区西直门"
);
repository
.
save
(
customer
);
Customer
xcustomer
=
repository
.
findByUserName
(
"summer"
);
System
.
out
.
println
(
xcustomer
);
}
@Test
public
void
fetchIndividualCustomers
()
{
System
.
out
.
println
(
"Customer found with findByUserName('summer'):"
);
System
.
out
.
println
(
"--------------------------------"
);
System
.
out
.
println
(
repository
.
findByUserName
(
"summer"
));
System
.
out
.
println
(
"--------------------------------"
);
System
.
out
.
println
(
"Customers found with findByAddress(\"北京\"):"
);
String
q
=
"北京"
;
for
(
Customer
customer
:
repository
.
findByAddress
(
q
))
{
System
.
out
.
println
(
customer
);
}
}
@Test
public
void
fetchPageCustomers
()
{
System
.
out
.
println
(
"Customers found with fetchPageCustomers:"
);
System
.
out
.
println
(
"-------------------------------"
);
Sort
sort
=
new
Sort
(
Sort
.
Direction
.
DESC
,
"address.keyword"
);
Pageable
pageable
=
PageRequest
.
of
(
0
,
10
,
sort
);
Page
<
Customer
>
customers
=
repository
.
findByAddress
(
"北京"
,
pageable
);
System
.
out
.
println
(
"Page customers "
+
customers
.
getContent
().
toString
());
}
@Test
public
void
fetchPage2Customers
()
{
System
.
out
.
println
(
"Customers found with fetchPageCustomers:"
);
System
.
out
.
println
(
"-------------------------------"
);
QueryBuilder
customerQuery
=
QueryBuilders
.
boolQuery
()
.
must
(
QueryBuilders
.
matchQuery
(
"address"
,
"北京"
));
Page
<
Customer
>
page
=
repository
.
search
(
customerQuery
,
PageRequest
.
of
(
0
,
10
));
System
.
out
.
println
(
"Page customers "
+
page
.
getContent
().
toString
());
page
=
repository
.
search
(
customerQuery
,
PageRequest
.
of
(
1
,
10
));
System
.
out
.
println
(
"Page customers "
+
page
.
getContent
().
toString
());
}
@Test
public
void
fetchAggregation
()
{
System
.
out
.
println
(
"Customers found with fetchAggregation:"
);
System
.
out
.
println
(
"-------------------------------"
);
QueryBuilder
customerQuery
=
QueryBuilders
.
boolQuery
()
.
must
(
QueryBuilders
.
matchQuery
(
"address"
,
"北京"
));
SumAggregationBuilder
sumBuilder
=
AggregationBuilders
.
sum
(
"sumAge"
).
field
(
"age"
);
SearchQuery
searchQuery
=
new
NativeSearchQueryBuilder
()
.
withQuery
(
customerQuery
)
.
addAggregation
(
sumBuilder
)
.
build
();
Aggregations
aggregations
=
elasticsearchTemplate
.
query
(
searchQuery
,
new
ResultsExtractor
<
Aggregations
>()
{
@Override
public
Aggregations
extract
(
SearchResponse
response
)
{
return
response
.
getAggregations
();
}
});
//转换成map集合
Map
<
String
,
Aggregation
>
aggregationMap
=
aggregations
.
asMap
();
//获得对应的聚合函数的聚合子类,该聚合子类也是个map集合,里面的value就是桶Bucket,我们要获得Bucket
InternalSum
sumAge
=
(
InternalSum
)
aggregationMap
.
get
(
"sumAge"
);
System
.
out
.
println
(
"sum age is "
+
sumAge
.
getValue
());
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录