ElasticSearch - À L'Aide De FilterBuilders

Je suis nouveau sur ElasticSearch et Couchbase. Je suis la construction d'un échantillon d'applications Java pour en savoir plus sur ElasticSearch et Couchbase.

La lecture de la ElasticSearch API Java, les Filtres sont mieux utilisées dans les cas où le tri sur le score n'est pas nécessaire et pour la mise en cache.
Je n'ai toujours pas compris comment utiliser FilterBuilders et avez des questions suivantes:

  • Peut FilterBuilders être utilisé seul pour la recherche?
  • Ou doivent-ils toujours être utilisé avec un Query? ( Si c'est vrai, quelqu'un peut-veuillez énumérer un exemple? )
  • En passant par une documentation, si je veux effectuer une recherche basée sur les valeurs de champ et que vous voulez utiliser FilterBuilders, comment puis-je le réaliser? (à l'aide de AndFilterBuilder ou TermFilterBuilder ou InFilterBuilder? Je ne suis pas clair sur les différences entre eux).

Pour la 3ème question, j'ai effectivement testé avec la recherche à l'aide des requêtes et d'utiliser des filtres comme indiqué ci-dessous.
J'ai obtenu un résultat vide (aucune ligne) quand j'ai essayé de la recherche à l'aide de FilterBuilders. Je ne suis pas sûr de ce que je fais mal.

Des exemples qui vous seront utiles. J'ai eu un moment difficile en passant par la documentation que j'ai trouvé rares et même de la recherche conduit à diverses fiable forums d'utilisateurs.

private void processQuery() {
        SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
        QueryBuilder qb = QueryBuilders.fieldQuery("doc.address.state", "TX");
        srb.setQuery(qb);

        SearchResponse resp = srb.execute().actionGet();
        System.out.println("response :" + resp);
    }

private void searchWithFilters(){
        SearchRequestBuilder srb = getSearchRequestBuilder(BUCKET);
        srb.setFilter(FilterBuilders.termFilter("doc.address.state", "tx"));
        //AndFilterBuilder andFb = FilterBuilders.andFilter();
        //andFb.add(FilterBuilders.termFilter("doc.address.state", "TX")); 
        //srb.setFilter(andFb);
        SearchResponse resp = srb.execute().actionGet();
        System.out.println("response :" + resp);
    }

--Mise à JOUR--

Comme suggéré dans la réponse, de changer de minuscules "tx". Avec cette question résolue. J'ai encore des questions suivantes:

  • Dans ce scénario(s), sont les filtres utilisés avec de la requête? Quel est l'objectif de ce servir?
  • Différence entre InFilter, TermFilter et MatchAllFilter. Toute illustration permettra de.

OriginalL'auteur aces. | 2013-05-10