J'essaie d'interroger elasticsearch en utilisant hibernatesearh 6. Vous trouverez ci-dessous la requête json envoyée à elasticsearch. Cela a l'air bien d'après la documentation ici : https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
{"query":{"query_string":{"fields":["addresses.address_key"],"query":"3g5g36ee-45b0-4636-79fe-9aaf446b7ab6"}}}
Cependant, le message d'exception suivant a été reçu :
org.hibernate.search.util.common.searchexception: hsearch400007: elasticsearch request failed: hsearch400090: elasticsearch response indicates a failure. request: post /employee-read/_search with parameters {from=0, size=10, track_total_hits=true} response: 400 'bad request' from 'http://localhost:9200' with body { "error": { "root_cause": [ { "type": "parsing_exception", "reason": "unknown query [query]", "line": 1, "col": 19 } ], "type": "parsing_exception", "reason": "unknown query [query]", "line": 1, "col": 19, "caused_by": { "type": "named_object_not_found_exception", "reason": "[1:19] unknown field [query]" } }, "status": 400 }
Les entités suivantes sont :
@indexed(index = "employee") public class employee { @fulltextfield(name = "employee_key") private string employeekey; @fulltextfield(name = "first_name") private string firstname; @indexedembedded(includeembeddedobjectid = true, includedepth = 2) private address addresses; } public class address { @fulltextfield(name = "address_key") private string addresskey; @fulltextfield(name = "street_name") private string streetname; }
Voici le code permettant d'obtenir des données d'Elastic, où la fonction prédicat est : (elasticsearchsearchpredicatefactory f) -> f.fromjson(queryjson)
SearchSession searchSession = Search.session(entityManager); SearchResult<Employee> searchResult = searchSession.search(Employee.class) .extension(ElasticsearchExtension.get()) .where(searchPredicateFactory -> { return predicateFunction.apply(searchPredicateFactory); }) .fetch(Math.toIntExact(page.getOffset()), page.getPageSize());
La recherche en veille prolongée s'attend à ce que vous transmettiez la requête elle-même sans objet json wrapper. Voir des exemples ici. Donc dans votre cas vous devriez réussir :
{ "query_string":{ "fields":[ "addresses.address_key" ], "query":"3g5g36ee-45b0-4636-79fe-9aaf446b7ab6" } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!