Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7460cd2

Browse files
committed
Initial Commit
0 parents commit 7460cd2

21 files changed

+678
-0
lines changed

‎.gitignore‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.iml
2+
idea
3+
target
4+
.idea

‎pom.xml‎

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>de.kevcodez</groupId>
8+
<artifactId>elasticsearch-test</artifactId>
9+
<version>0.1.0-SNAPSHOT</version>
10+
11+
<properties>
12+
<java.version>1.8</java.version>
13+
<maven.compiler.source>${java.version}</maven.compiler.source>
14+
<maven.compiler.target>${java.version}</maven.compiler.target>
15+
16+
<elasticsearch.version>5.1.1</elasticsearch.version>
17+
<gson.version>2.8.0</gson.version>
18+
<log4j.version>2.7</log4j.version>
19+
<lombok.version>1.16.12</lombok.version>
20+
</properties>
21+
22+
<dependencies>
23+
24+
<dependency>
25+
<groupId>org.projectlombok</groupId>
26+
<artifactId>lombok</artifactId>
27+
<version>${lombok.version}</version>
28+
</dependency>
29+
30+
<dependency>
31+
<groupId>org.elasticsearch.client</groupId>
32+
<artifactId>transport</artifactId>
33+
<version>${elasticsearch.version}</version>
34+
</dependency>
35+
36+
<dependency>
37+
<groupId>com.google.code.gson</groupId>
38+
<artifactId>gson</artifactId>
39+
<version>${gson.version}</version>
40+
</dependency>
41+
42+
<!-- Logging -->
43+
<dependency>
44+
<groupId>org.apache.logging.log4j</groupId>
45+
<artifactId>log4j-api</artifactId>
46+
<version>${log4j.version}</version>
47+
</dependency>
48+
<dependency>
49+
<groupId>org.apache.logging.log4j</groupId>
50+
<artifactId>log4j-core</artifactId>
51+
<version>${log4j.version}</version>
52+
</dependency>
53+
54+
</dependencies>
55+
56+
<build>
57+
<plugins>
58+
<plugin>
59+
<groupId>org.apache.maven.plugins</groupId>
60+
<artifactId>maven-compiler-plugin</artifactId>
61+
<version>3.6.0</version>
62+
<configuration>
63+
<source>${java.version}</source>
64+
<target>${java.version}</target>
65+
</configuration>
66+
</plugin>
67+
</plugins>
68+
</build>
69+
70+
71+
</project>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package de.kevcodez.elasticsearch;
2+
3+
import java.net.InetAddress;
4+
5+
import org.elasticsearch.client.transport.TransportClient;
6+
import org.elasticsearch.common.settings.Settings;
7+
import org.elasticsearch.common.transport.InetSocketTransportAddress;
8+
import org.elasticsearch.transport.client.PreBuiltTransportClient;
9+
10+
import lombok.SneakyThrows;
11+
12+
/**
13+
* Creates an Elasticsearch client.
14+
*
15+
* @author Kevin
16+
*/
17+
public class Client {
18+
19+
public static final String HOST = "localhost";
20+
public static final int PORT = 9300;
21+
22+
@SneakyThrows
23+
public static TransportClient create() {
24+
return new PreBuiltTransportClient(Settings.EMPTY)
25+
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
26+
}
27+
28+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package de.kevcodez.elasticsearch.create;
2+
3+
import java.util.List;
4+
5+
import org.elasticsearch.action.bulk.BulkRequestBuilder;
6+
import org.elasticsearch.action.bulk.BulkResponse;
7+
import org.elasticsearch.action.index.IndexRequestBuilder;
8+
import org.elasticsearch.client.transport.TransportClient;
9+
10+
import com.google.gson.Gson;
11+
12+
import de.kevcodez.elasticsearch.Client;
13+
import de.kevcodez.factory.DataGenerator;
14+
import de.kevcodez.factory.MockedDatabase;
15+
import de.kevcodez.model.Order;
16+
import lombok.extern.log4j.Log4j2;
17+
18+
/**
19+
* // TODO add class comment
20+
*
21+
* @author Kevin
22+
*/
23+
@Log4j2
24+
public class FillIndex {
25+
26+
private static Gson gson = new Gson();
27+
28+
private static final int NUM_CUSTOMERS = 2000;
29+
private static final int NUM_PRODUCTS = 50;
30+
private static final int NUM_ORDERS = 10000;
31+
32+
private DataGenerator dataGenerator = new DataGenerator();
33+
34+
public static void main(String[] args) {
35+
dataGenerator.createRandomCustomers(NUM_CUSTOMERS);
36+
dataGenerator.createRandomProducts(NUM_PRODUCTS);
37+
dataGenerator.createRandomOrders(NUM_ORDERS);
38+
39+
List<Order> randomOrders = MockedDatabase.getInstance().getOrders();
40+
41+
try (TransportClient client = Client.create()) {
42+
BulkRequestBuilder bulkRequest = client.prepareBulk();
43+
44+
randomOrders.stream().map(gson::toJson).forEach(jsonOrder -> {
45+
log.debug(jsonOrder);
46+
47+
IndexRequestBuilder indexRequest = client
48+
.prepareIndex("orders", "order")
49+
.setSource(jsonOrder);
50+
51+
bulkRequest.add(indexRequest);
52+
});
53+
54+
BulkResponse bulkResponse = bulkRequest.get();
55+
if (bulkResponse.hasFailures()) {
56+
throw new RuntimeException("Bulk response has exceptions");
57+
}
58+
}
59+
}
60+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package de.kevcodez.elasticsearch.search;
2+
3+
import org.elasticsearch.action.search.SearchResponse;
4+
import org.elasticsearch.client.transport.TransportClient;
5+
import org.elasticsearch.index.query.QueryBuilders;
6+
import org.elasticsearch.search.aggregations.AggregationBuilders;
7+
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
8+
import org.elasticsearch.search.aggregations.metrics.avg.AvgAggregationBuilder;
9+
10+
import de.kevcodez.elasticsearch.Client;
11+
import lombok.extern.log4j.Log4j2;
12+
13+
/**
14+
* Sample aggregation.
15+
*
16+
* @author Kevin
17+
*/
18+
@Log4j2
19+
public class Aggregations {
20+
21+
public static void main(String[] args) {
22+
AvgAggregationBuilder avgAggregation = AggregationBuilders
23+
.avg("averagePrice")
24+
.field("totalPrice");
25+
26+
try (TransportClient client = Client.create()) {
27+
SearchResponse searchResponse = client.prepareSearch()
28+
.setQuery(QueryBuilders.matchAllQuery())
29+
.addAggregation(avgAggregation)
30+
.get();
31+
32+
Avg average = searchResponse.getAggregations().get("averagePrice");
33+
log.info("Took {} millis", searchResponse.getTook().millis());
34+
log.info("Average total price: {}", average.getValue());
35+
}
36+
}
37+
38+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package de.kevcodez.elasticsearch.search;
2+
3+
import org.elasticsearch.action.search.SearchResponse;
4+
import org.elasticsearch.action.search.SearchType;
5+
import org.elasticsearch.client.transport.TransportClient;
6+
import org.elasticsearch.index.query.QueryBuilders;
7+
import org.elasticsearch.search.SearchHits;
8+
9+
import de.kevcodez.elasticsearch.Client;
10+
import lombok.extern.log4j.Log4j2;
11+
12+
/**
13+
* Sample searching.
14+
*
15+
* @author Kevin
16+
*/
17+
@Log4j2
18+
public class BasicSearch {
19+
20+
public static void main(String[] args) {
21+
try (TransportClient client = Client.create()) {
22+
SearchResponse response = client.prepareSearch().get();
23+
logSearchResponse(response);
24+
25+
SearchResponse detailedResponse = client.prepareSearch("orders")
26+
.setTypes("order")
27+
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
28+
.setPostFilter(QueryBuilders.rangeQuery("totalPrice").from(1).to(20))
29+
.setFrom(0)
30+
.setSize(60)
31+
.get();
32+
33+
logSearchResponse(detailedResponse);
34+
}
35+
}
36+
37+
private static void logSearchResponse(SearchResponse response) {
38+
SearchHits hits = response.getHits();
39+
log.info("Result size: " + hits.totalHits());
40+
log.info(response);
41+
}
42+
43+
44+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package de.kevcodez.factory;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
import de.kevcodez.model.Address;
7+
8+
/**
9+
* Factory for creating random addresses.
10+
*
11+
* @author Kevin
12+
*/
13+
public class AddressFactory implements Factory<Address> {
14+
15+
private static final List<String> streets = Arrays.asList("Abflugring", "Adalbertstr", "Mainberg", "Zweidlerweg");
16+
private static final List<String> zipCodes = Arrays.asList("21220", "20535", "21274", "56989", "51230", "78412");
17+
18+
public Address createRandom() {
19+
return Address.builder()
20+
.street(streets.get(Random.number(streets.size() - 1)) + " " + Random.numberBetween(1, 100))
21+
.zipCode(zipCodes.get(Random.number(zipCodes.size() - 1)))
22+
.build();
23+
}
24+
25+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package de.kevcodez.factory;
2+
3+
import static de.kevcodez.factory.Random.fromStringList;
4+
5+
import java.time.LocalDate;
6+
import java.util.Arrays;
7+
import java.util.List;
8+
9+
import de.kevcodez.model.Address;
10+
import de.kevcodez.model.Customer;
11+
12+
/**
13+
* Factory for creating random customers.
14+
*
15+
* @author Kevin
16+
*/
17+
public class CustomerFactory implements Factory<Customer> {
18+
19+
private static final List<String> firstNames = Arrays.asList("Kevin", "Hans", "Franz", "Marko", "Juli", "Sarafina");
20+
private static final List<String> lastNames = Arrays.asList("Meier", "Müller", "Strauß", "Schulz", "Steinbrunner");
21+
22+
private AddressFactory addressFactory = new AddressFactory();
23+
24+
public Customer createRandom() {
25+
Address randomAddress = addressFactory.createRandom();
26+
27+
Customer customer = Customer.builder()
28+
.firstName(fromStringList(firstNames))
29+
.lastName(fromStringList(lastNames))
30+
.birthdate(generateRandomBirthdate())
31+
.build();
32+
33+
randomAddress.setName(String.format("%s %s", customer.getFirstName(), customer.getLastName()));
34+
customer.setAddresses(Arrays.asList(randomAddress));
35+
36+
return customer;
37+
}
38+
39+
private static LocalDate generateRandomBirthdate() {
40+
int randomYear = Random.numberBetween(1940, 2016);
41+
int randomDay = Random.numberBetween(1, 28);
42+
int randomMonth = Random.numberBetween(1, 12);
43+
return LocalDate.of(randomYear, randomMonth, randomDay);
44+
}
45+
46+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package de.kevcodez.factory;
2+
3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.IntStream;
6+
7+
import de.kevcodez.model.AbstractEntity;
8+
import de.kevcodez.model.Customer;
9+
import de.kevcodez.model.Order;
10+
import de.kevcodez.model.Product;
11+
12+
/**
13+
* Generates random orders and puts them into elastic search.
14+
*
15+
* @author Kevin
16+
*/
17+
public class DataGenerator {
18+
19+
private OrderFactory orderFactory = new OrderFactory();
20+
private ProductFactory productFactory = new ProductFactory();
21+
private CustomerFactory customerFactory = new CustomerFactory();
22+
23+
public String get() {
24+
return "";
25+
}
26+
27+
28+
public void createRandomOrders(int amount) {
29+
List<Order> randomOrders = createRandoms(Order.class, orderFactory, amount);
30+
randomOrders.forEach(MockedDatabase.getInstance()::addOrder);
31+
}
32+
33+
public void createRandomProducts(int amount) {
34+
List<Product> randomProducts = createRandoms(Product.class, productFactory, amount);
35+
randomProducts.forEach(MockedDatabase.getInstance()::addProduct);
36+
}
37+
38+
public void createRandomCustomers(int amount) {
39+
List<Customer> randomOrders = createRandoms(Customer.class, customerFactory, amount);
40+
randomOrders.forEach(MockedDatabase.getInstance()::addCustomer);
41+
}
42+
43+
private <T> List<T> createRandoms(Class<T> clazz, Factory factory, int amount) {
44+
List<AbstractEntity> entities = IntStream.rangeClosed(1, amount)
45+
.boxed()
46+
.map(pos -> factory.createRandom())
47+
.collect(Collectors.toList());
48+
49+
IntStream.range(1, amount).forEach(pos -> entities.get(pos).setId(Long.valueOf(pos)));
50+
51+
return (List<T>) entities;
52+
}
53+
54+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package de.kevcodez.factory;
2+
3+
import de.kevcodez.model.AbstractEntity;
4+
5+
/**
6+
* // TODO add class comment
7+
*
8+
* @author Kevin
9+
*/
10+
public interface Factory<T extends AbstractEntity> {
11+
12+
T createRandom();
13+
14+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /