簡體   English   中英

我可以使用Elastic Search Java API按多個字段進行搜索嗎?

[英]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)
        )

注意:

  1. RangeQueryBuilder (從QueryBuilders.rangeQuery()返回)還具有方法#gte()

  2. 根據文檔:“在沒有must或filter子句的布爾查詢中,一個或多個should子句必須與文檔匹配。” 因此,如果沒有filtermust ,則可能無法獲得所需的行為。 上面的答案假定您正在使用其他一些子句。 關鍵是您可以在布爾查詢中組合子句。 對於Java API,這僅意味着重復使用子句。

  3. 您可能要使用過濾器,而不應該使用過濾器。 這將導致更快的執行和緩存( https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM