本文用實例來介紹如何使用Spring Data?Elasticsearch的ElasticsearchRestTemplate來操作ES,在Java中Elasticsearch使用類似MySQL的OR和AND進行多條件查詢。
官網(wǎng)
Elasticsearch Operations
bool query:
一種復(fù)合查詢,把其余類型的查詢包裹進來,支持以下三種邏輯關(guān)系。
must: AND ??
must_not:NOT
should:OR
ES查詢實例如下:
{
"bool" : {
"must" : { "term" : { "component" : "comp_1" } }, // must = And
"should" : [ // should = Or
{ "term" : { "userId" : "A1A1" } },
{ "term" : { "customerId" : "C1" } },
{ "term" : { "currentRole" : "ADMIN" }}
],
"minimum_should_match" : 1
}
}
在Java中代碼示例:
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
org.elasticsearch.index.query.QueryBuilder qb = QueryBuilders
.boolQuery()
.must(termQuery("component", currentComponent))
.should(termQuery("userId", currentUserId))
.should(termQuery("customerId", currentCustomerId))
.should(termQuery("currentRole", ADMIN))
// .must(QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("num", "6","8")))
.minimumNumberShouldMatch(1);
該must部分是ANDS;
該should部分都或多或少ORS;
除了你可以指定的最小數(shù)量should(用s到比賽minimum_should_match),這個最低默認為1,我認為(但你可以將其設(shè)置為0,這意味著文件不匹配的should條件也將被返回)。
如果要進行涉及嵌套ANDs和ORs的更復(fù)雜的查詢,只需將其他布爾查詢嵌套在內(nèi)部must或should部分中。
另外,當(dāng)您尋找準確的值(id等)時,也許可以使用術(shù)語查詢代替匹配查詢,從而節(jié)省了分析階段的時間(如果對這些字段進行了分析,則不一定有意義)對于ID)。如果對它們進行了分析,則您仍然可以這樣做,但前提是您必須確切地知道術(shù)語的存儲方式(例如,標準分析器將它們存儲為小寫)。
匹配關(guān)鍵字示例:
// es 查詢滿足條件1 或滿足條件2 的結(jié)果合集
//主查詢
matchQuery.must(
QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("xm","好的"))//分詞后匹配
.should(QueryBuilders.matchParaseQuery("addr","錢江路"))//匹配完整詞
.should(QueryBuilders.termQuery("status",0))//完全匹配
.should(QueryBuilders.termsQuery("keyword",string[]))//多關(guān)鍵字匹配
);
SearchResponse response = client.prepareSearch("indexName")
.setFrom(0)
.setSize(10)
.setQuery(matchQuery)
.get();
SearchHits hits = response.getHits();
int count = (int) hits.getTotalHits();
for(SearchHit one:hits)
{
//遍歷結(jié)果處理
}
如果本篇文章對你有幫助的話,很高興能夠幫助上你。文章來源:http://www.zghlxwxcb.cn/news/detail-431306.html
當(dāng)然,如果你覺得文章有什么讓你覺得不合理、或者有更簡單的實現(xiàn)方法又或者有理解不來的地方,希望你在看到之后能夠在評論里指出來,我會在看到之后盡快的回復(fù)你。文章來源地址http://www.zghlxwxcb.cn/news/detail-431306.html
到了這里,關(guān)于Java中Elasticsearch使用類似MySQL的OR和AND查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!