I am trying to query elasticsearch using hibernatesearh 6. Below is the json query sent to elasticsearch. It looks fine based on the documentation here: 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"}}}
However, the following exception message was received:
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 }
The following are entities:
@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; }
The following is the code to get data from elastic, where predicatefunction is: (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());
hibernate search expects you to pass the query itself without a wrapper json object. See examples here. So in your case you should pass:
{ "query_string":{ "fields":[ "addresses.address_key" ], "query":"3g5g36ee-45b0-4636-79fe-9aaf446b7ab6" } }
The above is the detailed content of named_object_not_found_Exception when querying ElasticSearch. For more information, please follow other related articles on the PHP Chinese website!