0

如果我在类的同一字段上指定两种类型的搜索(匹配和模糊),如下所示:

  QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();
  qb.bool().should(qb.keyword().onField("name").matching(searchQuery).createQuery())
     .should(qb.keyword().fuzzy().withPrefixLength(1).onField("name").matching(searchQuery).createQuery());

上面的搜索最终会是:

MATCHING searchQuery against "name" OR Fuzzy searchQuery against "name"
4

1 回答 1

3

我相信您最后可能会遗漏 a createQuery(),但除此之外,对我来说看起来很合理,但您可以随时检查自己。创建最终查询后,只需使用该Query.toString()方法即可,只要您相当熟悉 Lucene 查询解析器语法,它就会为您提供人类可读的查询表示。喜欢:

QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();
Query query = qb.bool()
    .should(qb.keyword().onField("name").matching(searchQuery).createQuery())
    .should(qb.keyword().fuzzy().withPrefixLength(1).onField("name").matching(searchQuery).createQuery())
.createQuery();

System.out.println(query.toString())
//Or however you like to output debugging information...
于 2013-11-01T07:10:23.643 回答