什么是用于搜索的Retrofit OR运算符

时间:2018-10-05 11:30:00

标签: java android retrofit2

我基本上想搜索带有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运算符,或者可以帮助我实现目标的东西。

1 个答案:

答案 0 :(得分:0)

找到了答案:

|表示“或”操作

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html

但是它在查询中不起作用,因此要实现我的目标,我需要将|转换为OR(前后带有空格)

  

_search?default_operator = AND&q = new * +国家/地区:(美国或加拿大)