有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

弹性搜索java中的弹性搜索查询

我很难用Java实现这个URL查询,它不会返回任何结果。但从浏览器返回所有结果,以下是返回结果的URL:

_search?pretty&q=*357*+AND+account_id:574fe92c9179a809fd76f0b8+AND+invalid:false

这是我的代码(不返回任何结果):

    FilterBuilder[] filtersArray = new FilterBuilder[2];
    filtersArray[0] = FilterBuilders.termFilter("account_id", "574fe92c9179a809fd76f0b8");
    filtersArray[1] = FilterBuilders.termFilter("invalid", false);
    QueryBuilder query = QueryBuilders.filteredQuery(QueryBuilders.simpleQueryStringQuery("*357*"), FilterBuilders.andFilter(filtersArray));
    SearchResponse response = esClient.prepareSearch(SecurityManager.getNamespace())
            .addSort("created_time", SortOrder.DESC)
            .setTypes(dataType)
            .setQuery(query)
            .addFields("_id")
            .setFrom(page * size)
            .setSize(size)
            .setExplain(false)
            .execute()
            .actionGet();

有人能告诉我什么是将URL查询转换为java查询的最佳方法吗


共 (1) 个答案

  1. # 1 楼答案

    首先,您应该使用的URL查询是

    ?q=*357*+AND+account_id:574fe92c9179a809fd76f0b8+AND+invalid:false
    

    否则account_idinvalid就没有约束了

    然后,这个新的URL查询在Java中的确切翻译是

    QueryBuilder query = QueryBuilders.queryStringQuery("*357* AND account_id:574fe92c9179a809fd76f0b8 AND invalid:false");
    SearchResponse response = esClient.prepareSearch(SecurityManager.getNamespace())
            .addSort("created_time", SortOrder.DESC)
            .setTypes(dataType)
            .setQuery(query)
            .addFields("_id")
            .setFrom(page * size)
            .setSize(size)
            .setExplain(false)
            .execute()
            .actionGet();
    

    注:

    • queryStringQuery而不是{}
    • 没有筛选器,因为它们都已在查询字符串中