我使用Elastic-search在Java中工作,并希望通过“contains string”参数过滤数据。
例如:检索名称以“r”开头的子项列表。
但是搜索查询(下面的代码)会将名称相等(不包含)的子项列表返回给'r'。
我试过“r *” - 没有运气。
builder.must(QueryBuilders.queryStringQuery("r*")
.field("child_name")
.lenient(true)
.escape(true)
.analyzeWildcard(false)
.fuzziness(Fuzziness.ZERO)
.defaultOperator(Operator.AND)
.boost(2.0f));
}
答案 0 :(得分:1)
尝试其他类型的QueryBuilder
- WildcardQueryBuilder
:
实现通配符搜索查询。支持的通配符是*,其中 匹配任何字符序列(包括空字符序列)和?,哪个 匹配任何单个字符。请注意,此查询可能很慢,因为它需要 迭代许多术语。为了防止极度缓慢 WildcardQueries,一个通配符术语不应该以其中一个开头 通配符*或?。
示例:
QueryBuilder qb = QueryBuilders.wildcardQuery("user", "k?mc*");
答案 1 :(得分:1)
最后,我发现了自己的问题。 我的问题是两个:
.analyzeWildcard(false)
.boost(2.0f))
我改为:
.analyzeWildcard(true)
.boost(1.0f))
它有所帮助。
答案 2 :(得分:0)