Heim > Java > „named_object_not_found_Exception' beim Abfragen von ElasticSearch

„named_object_not_found_Exception' beim Abfragen von ElasticSearch

WBOY
Freigeben: 2024-02-06 09:15:12
nach vorne
514 Leute haben es durchsucht
Frageninhalt

Ich versuche, Elasticsearch mit Hibernatesearh 6 abzufragen. Unten ist die an Elasticsearch gesendete JSON-Abfrage. Laut der Dokumentation hier sieht es gut aus: 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"}}}
Nach dem Login kopieren

Es wurde jedoch die folgende Ausnahmemeldung empfangen:

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
}
Nach dem Login kopieren

Die folgenden Einheiten sind:

@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;

}
Nach dem Login kopieren

Das Folgende ist der Code zum Abrufen von Daten aus Elastic, wobei die Prädikatfunktion lautet: (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());
Nach dem Login kopieren


Richtige Antwort


Die Hibernate-Suche erwartet, dass Sie die Abfrage selbst ohne ein Wrapper-JSON-Objekt übergeben. Beispiele finden Sie hier. In Ihrem Fall sollten Sie also bestehen:

{
   "query_string":{
      "fields":[
         "addresses.address_key"
      ],
      "query":"3g5g36ee-45b0-4636-79fe-9aaf446b7ab6"
   }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt von„named_object_not_found_Exception' beim Abfragen von ElasticSearch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage