0

J'utilise le code suivant pour filtrer par recherche élastique java api, cela fonctionne bien et renvoie le résultat si j'utilise la requête de chaîne, mais si j'utilise du texte avec des espaces ou des majuscules, il ne retourner les donnéeselasticsearch avec l'espace NativeSearchQueryBuilder et les majuscules

si l'utilisation

String query={"bool":{"should":[{"term":{"name":"test"}}]}} 

données de retour

et si j'utilise

String query={"bool":{"should":[{"term":{"name":"test airportone"}}]}} 

ou

String query={"bool":{"should":[{"term":{"name":"TEST"}}]}} 

retour Aucune donnée

String query={"bool":{"should":[{"term":{"name":"test airport one"}}]}} 
BoolQueryBuilder bool = new BoolQueryBuilder(); 
    bool.must(new WrapperQueryBuilder(query)); 

SearchQuery searchQuery = new 
      NativeSearchQueryBuilder() 
      .withQuery(bool) 
      .build(); 
    Page<Asset> asset = 
      elasticsearchTemplate.queryForPage(searchQuery,Asset.class); 
     return asset.getContent(); 
+0

double possible de http://stackoverflow.com/questions/21933787/elasticsearch-not-returning-results-for-terms-query-against-string-property – ChintanShah25

Répondre

0

Vous avez deux options en fonction de votre cas d'utilisation.

Première option: Vous pouvez utiliser match au lieu de term pour rechercher une chaîne si vous voulez obtenir l'avantage des capacités de recherche en texte intégral ElasticSearch.

{ 
    "bool": { 
     "should": [{ 
      "match": { 
       "name": "test airportone" 
      } 
     }] 
    } 
} 

Deuxième option: Vous pouvez également spécifier que le champ est namenot analyzed lors du mappage de votre index afin ElasticSearch toujours stocker comme il est et sera toujours d'obtenir la correspondance exacte.

"mappings": { 
    "user": { 
     "properties": { 
      "name": { 
       "type": "string" 
       "index": "not_analyzed" 
      } 
     } 
    } 
} 
+0

Merci pour vous rejouer, j'utilise IndexQuery indexQuery = new IndexQueryBuilder(). AvecId (id) .withObject (asset) .build(); elasticsearchTemplate.index (indexQuery); Comment est-ce que je peux indexer avec not_analyzed –

+0

En utilisant '@Field (type = Chaîne, index = not_analyzed)' 'private String name;' vous pouvez importer 'not_analyzed' de' org.springframework.data.elasticsearch.annotations.FieldIndex' – MIE