Heroku Elastic Search Example
Elastic search configuration
package com.example.elasticsearch;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.ClientConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JestConfiguration {
@Bean
public JestClient jestClient(){
// Configuration
ClientConfig clientConfig = new ClientConfig.Builder(System.getenv("SEARCHBOX_URL"))
.multiThreaded(true).build();
// Construct a new Jest client according to configuration via factory
JestClientFactory factory = new JestClientFactory();
factory.setClientConfig(clientConfig);
JestClient client = factory.getObject();
return client;
}
}
Elastic search service
package com.example.elasticsearch;
import java.util.List;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Bulk;
import io.searchbox.core.Index;
import io.searchbox.core.Search;
import io.searchbox.indices.CreateIndex;
import io.searchbox.indices.IndicesExists;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Service;
import com.example.jpa.JpaCustomerService;
import com.example.model.Customer;
import com.example.service.CustomerService;
@Service
@Import(JpaCustomerService.class)
public class JestService {
@Autowired @Qualifier("jpaRepository") CustomerService jpaCustomerService;
@Autowired JestClient jestClient;
@Autowired
public void createCustomerIndex(){
try {
IndicesExists indicesExists = new IndicesExists.Builder().build();
JestResult result = jestClient.execute(indicesExists);
if (!result.isSucceeded()) {
// Create customer index
CreateIndex createIndex = new CreateIndex.Builder("customers").build();
jestClient.execute(createIndex);
}
Bulk bulk = new Bulk.Builder()
.addAction(new Index.Builder(jpaCustomerService.getAllCustomers()).index("customer").type("customer").build())
.build();
result = jestClient.execute(bulk);
System.out.println(result.getJsonString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<Customer> searchCustomers(String customerQuery){
try {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryString(customerQuery));
Search search = new Search.Builder(searchSourceBuilder.toString())
.addIndex("customer")
.addType("customer")
.build();
JestResult result = jestClient.execute(search);
return result.getSourceAsObjectList(Customer.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}