首页 > 解决方案 > 如何处理连字符 Elasticsearch QueryBuilder Java?

问题描述

我正在尝试对我为用户拥有的数据表进行后端过滤。UI 中提供了列过滤,我需要能够通过子字符串查询 Elasticsearch 数据库中的字段名称。

QueryBuilders.wildcardQuery(field.get(i),String.format("*%s*",filter.get(i).toLowerCase())));

这是我尝试过的查询,也尝试过添加 .operator(Operator.AND),但它说 QueryBuilder 没有运算符功能。

目前,此查询通过对数据库的 POST 请求进行,但我需要能够通过 Java API 执行此操作。

{
    "query":{
        "simple_query_string" : {
            "fields" : ["ideaId"], 
            "query" : "*hello-world*", 
            "analyze_wildcard":true, 
            "default_operator":"AND"
        }
    }
}

我也尝试用 AND 替换连字符,但没有返回正确的记录。

{
    "query":{
        "simple_query_string" : {
            "fields" : ["ideaId"], 
            "query" : "*hello AND world*", 
            "analyze_wildcard":true
        }
    }
}

标签: javaelasticsearch

解决方案


对于任何想知道您必须使用 simpleQueryStringQuery 的人:

QueryBuilders.simpleQueryStringQuery(String.format("*%s*", filter.get(i).toLowerCase()))
                .analyzeWildcard(true)
                .field(field.get(i))
                .defaultOperator(Operator.AND))

推荐阅读