2017-02-01 8 views
1

私は私の春ブーツのAppでElasticsearch 2.4.3を使用していますし、使用次のクエリ私は最初のクエリまたは2番目のクエリは、ヒットを取得レスポンスを、取得したいElasticsearchのJava API - ブールクエリ演算子

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)); 

私のコードでそれを変更するのを手伝ってもらえますか?人や活動:

UPDATE

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

UPDATE#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); 

私は2つのインデックスを持っています。私が2番目のクエリをコメントアウトするとき、私はヒットを人と活動から得る。 3つのクエリがすべて存在する場合、アクティビティからのヒットはもう存在しません....

アイデア?

+1

変更' must'を追加し、 'minimumShouldMatch(1)' – Val

+0

おかげヴァルを追加し、それが動作します!しかし、私のKoelnerphoneticクエリは動作しません:(それは "Mayer/Maier/Meyer/Meier"のようなものを処理し、これらのものは同じであると言います...私の質問で私はこれについてのマッピング/設定を更新しました –

+0

Ok、 nvm .....最初のクエリで間違ったアナライザを使用しました –

答えて

2

単に代わりにshouldmustを変更し、代わりに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)); 
+0

例がありがとう - それはうまくいきましたが、別の問題が発生しました(アップデート#2を参照)。 –

+0

正しいアナライザを使用する必要があります'atsCustomPhoneticAnalyzer'を定義しましたが、あなたは' atsCustomSearchAnalyzer'を参照しています – Val

+0

私のCustomSearchAnalyzerを質問エリアのマッピングの例に追加しました –