comment écrire du code pour la recherche dans elasticsearch à l'aide de la plaisanterie client en java
J'ai essayer ce code URL est http://localhost:9200 indice est restaurant est de type menu.
Je veux passer l'id par le biais de la searchbuilder
. Svp quelqu'un peut m'aider. J'ai eu cette sortie
722 [main] INFO io.searchbox.client.JestClientFactory - Node Discovery Disabled...
hai
io.searchbox.core.SearchResult@35f8a538
mais je veux données de l'id de
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.JestResult;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import io.searchbox.core.SearchResult.Hit;
import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import jesttask.*;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import com.google.gson.JsonObject;
public class Elasticsearch
{
public static void main( String[] args ) throws Exception
{
JestClient client = openClient();
JsonObject json=new JsonObject();
pour la recherche de code ici
/* Search search = (Search) new Search.Builder("http://localhost:9200/")
//multiple index or types can be added.
.addIndex("articles")
.addType("article")
.build();
JestResult result = client.execute(search);*/
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryString("AVE5MpaA7X6GJDWpFptT"));
Search search = (Search) new Search.Builder(searchSourceBuilder.toString())
//multiple index or types can be added.
.addIndex("restarent")
.addType("menu")
.build();
System.out.println("hai");
JestResult result = client.execute(search);
System.out.println(result);
List<SearchModel> reviewList = result.getSourceAsObjectList(SearchModel.class);
for(SearchModel review: reviewList){
System.out.println("h");
System.out.println("search result is " + review);
}
/*
SearchHit[] results = result.getHits().getHits();
for (SearchHit hit : results) {
System.out.println(hit.getId()); //prints out the id of the document
Map<String,Object> result2 = hit.getSource(); //the retrieved document
}*/
/*List<SearchModel> sources = result.getSourceAsObjectList(SearchModel.class);
for (SearchModel source : sources) {
System.out.println("h");
System.out.println(source.getTitle() + " -> " + source.getItem());
}*/
client.shutdownClient();
}
private static JestClient openClient()
{
HttpClientConfig clientConfig = new HttpClientConfig.Builder("http://localhost:9200/")
.multiThreaded(true).build();
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(clientConfig);
JestClient jestClient = factory.getObject();
return jestClient;
}
}
mon modèle de classe est
import io.searchbox.annotations.JestId;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SearchModel {
@JestId
private String id;
@JsonProperty("price")
private double price;
@JsonProperty("quantity")
private String quantity;
@JsonProperty("item")
private String item;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer l'id de par Obtenir.Le constructeur auprès d'io."searchbox".de base.Obtenir
Cela peut être utile pour vous:
Vous pouvez télécharger le code de dépôt git ainsi.
https://github.com/pradeekb/ElasticSearch
Avec un GET simple appel sur votre navigateur, vous pouvez vérifier si votre indice de point de terminaison, ça fonctionne bien:
http://localhost:9200/yourIndexName
Si tout semble bien (vous devriez obtenir le statut http 200) essayez de changer
à
QueryBuilders.matchQuery("id", "AVE5MpaA7X6GJDWpFptT")
Note: juste une supposition, pas testé.
Edit: Vous pouvez aussi vérifier si tout semble aller bien avec votre sintax "restarent" xD
Cela fonctionne.
QueryBuilders.matchQuery("_id", "AVE5MpaA7X6GJDWpFptT")
id est stocké comme _id dans elasticsearch db. Cela vous donnera le résultat escompté.