Saya cuba menanyakan elasticsearch menggunakan hibernatesearh 6. Di bawah ialah pertanyaan json yang dihantar ke elasticsearch. Ia kelihatan baik mengikut dokumentasi di sini: 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"}}}
Walau bagaimanapun, mesej pengecualian berikut telah diterima:
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 }
Berikut adalah entiti:
@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; }
Berikut ialah kod untuk mendapatkan data daripada elastik, di mana fungsi predikat ialah: (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());
carian hibernate mengharapkan anda lulus pertanyaan itu sendiri tanpa objek json pembalut. Lihat contoh di sini. Jadi dalam kes anda, anda harus lulus:
{ "query_string":{ "fields":[ "addresses.address_key" ], "query":"3g5g36ee-45b0-4636-79fe-9aaf446b7ab6" } }
Atas ialah kandungan terperinci bernama_object_not_found_Exception apabila menanyakan ElasticSearch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!