簡體   English   中英

Elasticsearch Java API - Bool 查詢運算符

[英]Elasticsearch Java API - Bool Query Operator

我在 Spring Boot 應用程序中使用 Elasticsearch 2.4.3 並使用以下查詢

    QueryBuilder qb = new BoolQueryBuilder()
        .must(QueryBuilders.multiMatchQuery(term, "phoneticFirstName", "phoneticLastName", "phoneticLocationName", "phoneticCompanyName")
                .analyzer("atsCustomSearchAnalyzer")
                .operator(Operator.AND))
        .must(QueryBuilders.multiMatchQuery(term, "ngramFirstName^3", "ngramLastName^3", "ngramLocationName^3", "ngramCompanyName^3", "_all")
                .analyzer("atsCustomSearchAnalyzer")
                .operator(Operator.AND));

我想得到一個回應,第一個查詢或第二個查詢得到點擊......你能幫我在我的代碼中改變它嗎?

更新

        "atsCustomPhoneticAnalyzer":{
            "type":"custom",
            "tokenizer":"whitespace",
            "filter":["lowercase","asciifolding","atsPhoneticFilter"]
        },
        "atsCustomSearchAnalyzer":{
            "type":"custom",
            "tokenizer":"whitespace",
            "filter":["lowercase","asciifolding","umlautStemmer","germanStemmer"]   
        }

更新 #2

    QueryBuilder qb = new BoolQueryBuilder()
        .should(QueryBuilders.multiMatchQuery(term, "ngramFirstName", "ngramLastName", "ngramLocationName", "ngramCompanyName")
            .type(Type.CROSS_FIELDS)
            .analyzer("atsCustomSearchAnalyzer")
            .operator(Operator.AND)
            .boost(3))
        .should(QueryBuilders.multiMatchQuery(term, "phoneticLastName")
            .analyzer("atsCustomPhoneticAnalyzer")
            .operator(Operator.AND))
        .should(QueryBuilders.matchQuery(term, "_all")
                .analyzer("atsCustomSearchAnalyzer")
                .operator(Operator.AND))
        .minimumNumberShouldMatch(1);

我有兩個指標:人和活動。 當我注釋掉第二個查詢時,我會從人員和活動中獲得 Hits。 如果所有 3 個查詢都存在,則活動的點擊量不再存在....

有任何想法嗎?

只需將must改為should並添加minimumShouldMatch(1)

QueryBuilder qb = new BoolQueryBuilder()
    .minimumNumberShouldMatch(1)
    .should(QueryBuilders.multiMatchQuery(term, "phoneticFirstName", "phoneticLastName", "phoneticLocationName", "phoneticCompanyName")
            .analyzer("atsCustomSearchAnalyzer")
            .operator(Operator.AND))
    .should(QueryBuilders.multiMatchQuery(term, "ngramFirstName^3", "ngramLastName^3", "ngramLocationName^3", "ngramCompanyName^3", "_all")
            .analyzer("atsCustomSearchAnalyzer")
            .operator(Operator.AND));

暫無
暫無

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

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