Java中的弹性搜索查询:包含字符串查询?

时间:2018-05-08 08:30:42

标签: java elasticsearch

我使用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));
    }

3 个答案:

答案 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)

试试这个:

enter image description here

wildcardQuery ==> 数据库中 LIKE 的一些函数