[英]Solutions For Elastic Search document Update For Multiple fields using JAVA Api Code
[英]Can I search by multiple fields using the Elastic Search Java API?
例:
|studentname | maths | computers |
++++++++++++++++++++++++++++++++++
|s1 |78 |90 |
==================================
|s2 |56 |75 |
==================================
|s3 |45 |50 |
==================================
上表表示Elasticsearch中存在的數據。
考慮到用戶輸入60 and above
那么Elasticsearch應該只能顯示s1 ,因為他是唯一在這兩個主題上得分都超過60的學生。
如何使用Java API解決該問題?
注意:我可以通過以下方式找到各個主題:
QueryBuilder query = QueryBuilders.boolQuery()
.should(
QueryBuilders.rangeQuery(maths)
.from(50)
.to(100)
)
在bool查詢中可以有多個.should()
子句。 因此,在您的情況下:
QueryBuilder query = QueryBuilders.boolQuery()
.should(
QueryBuilders.rangeQuery(maths)
.from(61)
.to(100)
)
.should(
QueryBuilders.rangeQuery(computers)
.from(61)
.to(100)
)
注意:
RangeQueryBuilder
(從QueryBuilders.rangeQuery()
返回)還具有方法#gte()
。
根據文檔:“在沒有must或filter子句的布爾查詢中,一個或多個should子句必須與文檔匹配。” 因此,如果沒有filter
或must
,則可能無法獲得所需的行為。 上面的答案假定您正在使用其他一些子句。 關鍵是您可以在布爾查詢中組合子句。 對於Java API,這僅意味着重復使用子句。
您可能要使用過濾器,而不應該使用過濾器。 這將導致更快的執行和緩存( https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.