Rumah > Java > bernama_object_not_found_Exception apabila menanyakan ElasticSearch

bernama_object_not_found_Exception apabila menanyakan ElasticSearch

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-06 09:15:12
ke hadapan
649 orang telah melayarinya
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"}}}
Salin selepas log masuk

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
}
Salin selepas log masuk

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;

}
Salin selepas log masuk

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());
Salin selepas log masuk


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"
   }
}
Salin selepas log masuk

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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan