2017-02-10 120 views
3

我想实现从给定的大学和名称的用户的选择。这里的名字有模糊查询。 以下是弹性搜索(v5.1.2)中的查询,它给了我想要的结果。但给人在Java中在弹性搜索java客户端模糊查询Bool查询

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

(V5.1.2)

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

错误我试图实现这一点使用下面的Java API,但我得到一个错误说:

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

如何修复这个错误或者是否有其他方法来实现这个查询?

回答

2

的问题是,该方法不fuziness()参数返回当前Fuzziness,这显然是不被must()预期,而你需要做这样的事情:

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

一段代码,解释问题多一点:

/** 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; 
    } 

你叫,第二种方法,而你需要调用第一个。

+0

非常感谢。我从来没有想过这可能是问题所在。你解释得很好。 –

+0

另外它说默认自动,所以我认为我不必提供任何参数。 –