2017-02-10 5 views
3

J'essaie de mettre en œuvre la sélection des utilisateurs d'un collège donné et nom. Ici le nom a une requête floue. Voici la requête en recherche élastique (v5.1.2) qui me donne le résultat désiré. Mais donne une erreur en Javarequête Bool avec flou dans la recherche élastique client java

{ 
    "query" : { 
     "bool": { 
      "must" : [{ 
       "match": { 
        "collegeAccountCode": "DIT" 
       } 
      }, 
      { 
       "match": { 
        "name" : { 
         "query": "Rahul", 
         "fuzziness" : "AUTO" 
        } 
       } 
      }] 
     } 
    } 
} 

J'ai essayé de mettre en œuvre cette API à l'aide suivante java (version 5.1.2)

QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", studentName).fuzziness()) 
      .must(QueryBuilders.matchQuery("collegeAccountCode", AccountId)); 

Mais je reçois une erreur disant:

"The method must(QueryBuilder) in the type BoolQueryBuilder is not applicable for the arguments 
(Fuzziness)" 

Comment réparer cette erreur ou existe-t-il un autre moyen d'implémenter cette requête?

Répondre

2

Le problème est, cette méthode fuziness() sans paramètre retourner le Fuzziness courant, ce qui est ne devrait évidemment par must(), et vous devez faire quelque chose comme ceci:

QueryBuilders.boolQuery() 
       .must(QueryBuilders.matchQuery("name", "Rahul").fuzziness(Fuzziness.AUTO)) 
       .must(QueryBuilders.matchQuery("collegeAccountCode", "DIT")); 

Un morceau de code, ce qui explique le problème un peu plus:

/** Sets the fuzziness used when evaluated to a fuzzy query type. Defaults to "AUTO". */ 
    public MatchQueryBuilder fuzziness(Object fuzziness) { 
     this.fuzziness = Fuzziness.build(fuzziness); 
     return this; 
    } 

    /** Gets the fuzziness used when evaluated to a fuzzy query type. */ 
    public Fuzziness fuzziness() { 
     return this.fuzziness; 
    } 

Vous avez appelé, la deuxième méthode, alors que vous devez appeler le premier.

+0

Merci beaucoup. Je n'ai jamais pensé que cela pourrait être le problème. Vous l'avez très bien expliqué. –

+0

Aussi il dit par défaut AUTO donc j'ai supposé que je ne dois pas fournir d'arguments. –