Rumah  >  Artikel  >  bernama_object_not_found_Exception apabila menanyakan ElasticSearch

bernama_object_not_found_Exception apabila menanyakan ElasticSearch

WBOY
WBOYke hadapan
2024-02-06 09:15:12439semak imbas
Kandungan soalan

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());

Jawapan betul


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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam