У меня проблема с запросомasticsearch в Java. Это мой код:
BoolQueryBuilder qb = QueryBuilders.boolQuery();
for example:
if (myFilter.getTerm1() != null) {
qb.should(QueryBuilders.termsQuery("myfield1", myFilter.getTerm1()));
}
if (myFilter.getTerm2() != null) {
qb.should(QueryBuilders.termsQuery("myfield2", myFilter.getTerm2()));
}
qb.minimumShouldMatch("100%");
SearchRequest request = op.searchRequest(classTarget(MyClass.class));// this just create a new SearchRequest
sourceBuilder.query(QueryBuilders.simpleQueryStringQuery(qb.toString()));
sourceBuilder.from((pageNumber));
sourceBuilder.size(pageSize);
request.source(sourceBuilder);
Проблема в том, что это возвращает мне все результаты, совпадающие с «myfield1 ИЛИ myfield2», Но мне нужно иметь все результаты, соответствующие« myfield1 AND myfield2 »
Например, если у меня есть 2 документа, один с
myfield1 =« Foo »и myfield2 = «Test»
и другие с:
myfield1 = «Elastic» и myfield2 = «Search»
, если я сделал запрос с myfield1 = «Foo»И myfield2 =« Поиск »Я ожидаю, что результатов не будет, но у меня есть оба документа.
Я также попытался использовать« должен »вместо« должен », и я попытался установить для оператора по умолчанию« И »”В sourceBuilder, но в этом случае у меня вообще нет результатов, даже если запрос должен что-то возвращать.
это печать" запроса "
Query request: SearchRequest{searchType=QUERY_THEN_FETCH, indices=[myIndex], indicesOptions=IndicesOptions[ignore_unavailable=false, allow_no_indices=true, expand_wildcards_open=true, expand_wildcards_closed=false, allow_aliases_to_multiple_indices=true, forbid_closed_indices=true, ignore_aliases=false], types=[data], routing='null', preference='data', requestCache=null, scroll=null, maxConcurrentShardRequests=0, batchedReduceSize=512, preFilterShardSize=128, allowPartialSearchResults=null, source={"from":0,"size":100,"query":{"simple_query_string":{"query":"{\n \"bool\" : {\n \"should\" : [\n {\n \"terms\" : {\n \"myfield1.keyword\" : [\n \"foo\"\n ],\n \"boost\" : 1.0\n }\n },\n {\n \"terms\" : {\n \"myfield2.keyword\" : [\n \"search\"\n ],\n \"boost\" : 1.0\n }\n }\n ],\n \"adjust_pure_negative\" : true,\n \"minimum_should_match\" : \"100%\",\n \"boost\" : 1.0\n }\n}","flags":-1,"default_operator":"or","analyze_wildcard":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"fuzzy_transpositions":true,"boost":1.0}}}}