2016-06-03 2 views
1

У меня возникли проблемы с работой этого URL-запроса в Java, он не возвращает никаких результатов. но из браузера возвращает все результаты, вот URL, который возвращает результат:эластичный поисковый запрос в java

_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-запрос?

+0

В вашем URL запроса '& account_id = 574fe92c9179a809fd76f0b8 & недействителен = false' не будет иметь никакого эффекта, я думаю, что вы хотите, чтобы это вместо : 'q = * 357 * + AND + account_id: 574fe92c9179a809fd76f0b8 + AND + invalid: false'. Проверьте свои результаты, и вы увидите, что у вас есть документы с разными значениями 'account_id' и' invalid'. – Val

+0

OK извините за ошибку, но даже после того, как я положил ее в упомянутый выше, я все еще получаю 2256 просмотров, но ничего в драйвере JAVA:/ – user1221612

+0

Я обновил вопрос – user1221612

ответ

1

Во-первых, запрос URL, вы должны использовать это один

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

иначе вы не будете иметь никаких ограничений на account_id и invalid

Тогда точный перевод этого нового 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 и не simpleQueryStringQuery
  • нет фильтров, поскольку они находятся в строке запроса уже
Смежные вопросы