我基本上想搜索带有2个过滤器/标签的查询
(例如2个国家/地区中的1个城市-美国或加拿大)
ElasticSearchAPi.java
public interface ElasticSearchAPI { @GET("_search/") Call search( @HeaderMap Map headers, @Query("default_operator") String operator, @Query("q") String query ); }
Search.java的一部分
Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); ElasticSearchAPI searchAPI = retrofit.create(ElasticSearchAPI.class); HashMap headerMap = new HashMap(); headerMap.put("Authorization", Credentials.basic("user", mElasticSearchPassword)); String searchString = ""; if(!mSearchText.equals("")){ searchString = searchString + mSearchText.getText().toString() + "*"; } if(!mPrefCountry.equals("")){ searchString = searchString + " country:" + mPrefCountry; } Call call = searchAPI.search(headerMap, "AND", searchString); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { HitsList hitsList = new HitsList(); String jsonResponse = ""; try{ Log.d(TAG, "onResponse: server response: " + response.toString()); if(response.isSuccessful()){ hitsList = response.body().getHits(); }else{ jsonResponse = response.errorBody().string(); } Log.d(TAG, "onResponse: hits: " + hitsList); for(int i = 0; i call, Throwable t) { Log.e(TAG, "onFailure: " + t.getMessage() ); Toast.makeText(getActivity(), "search failed", Toast.LENGTH_SHORT).show(); } }); } return false; }
例如该代码将呈现ff查询,该查询显示的国家/地区内名称为 NEW 的可用城市:
_search?default_operator = AND&q = new * + country:Us
但是我想要达到的目标是这样的:
_search?default_operator = AND&q = new * + country:美国||加拿大
应会显示所有名称在美国或加拿大内的城市,其名称带有 NEW 。
但是 || 似乎不起作用,因此我要求使用正确的Retrofit OR运算符,或者可以帮助我实现目标的东西。
答案 0 :(得分:0)
找到了答案:
|
表示“或”操作
但是它在查询中不起作用,因此要实现我的目标,我需要将|
转换为OR
(前后带有空格)
_search?default_operator = AND&q = new * +国家/地区:(美国或加拿大)