2

The java-high-level-rest-client provides a method to search on elasticsearch using a term that Shown below its code

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
sourceBuilder.query(QueryBuilders.termQuery("user", "kimchy")); 

But I want to do a query on multiple fields like this: "user"="kimchy" and/or "city"="london".

I see the multi-search query and multi-match query but they don't do what I want.

Thanks for the help!!

2 Answers 2

7

try this:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder
    .filter(QueryBuilders.termQuery("user", "kimchy"))
    .filter(QueryBuilders.termQuery("city", "london"));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(boolQueryBuilder);

the filter/must/should method on BoolQueryBuilder, depends on which context you want, if you want "or", you can use should.

Sign up to request clarification or add additional context in comments.

Comments

0

One can try this.

BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
            foreach (var term in (s + ',' + t).Split(','))
            {
                booleanQuery.add(new TermQuery(new Term("content", term)), BooleanClause.Occur.SHOULD);
            }
            //booleanQuery.add(new TermQuery(new Term("content", s)), BooleanClause.Occur.MUST);
            //booleanQuery.add(new TermQuery(new Term("content", t)), BooleanClause.Occur.MUST);
            TopDocs hits = searcher.search(booleanQuery.build(), int.MaxValue);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.