2017-04-25 12 views
0

Java APIを使用して、クエリに関連付けられているフィールド/強調表示されたフィールドを取得できる必要があります。だから私は_allフィールド(またはそれ以外の場合は*)をクエリに追加し、応答のフィールドを強調表示します。 これはほとんどの場合動作しますが、必ずしもそうではありません。ここでは抜粋です。弾性検索:強調表示されたフィールドが必ず返されるとは限りません

 final BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 

     Arrays.asList(query.split(" ")) 
       .stream() 
       .map(QueryParser::escape) 
       .map(x -> String.format("*%s*", x)) 
       .forEach(x -> { 
        boolQueryBuilder.should(
          QueryBuilders.queryStringQuery(x) 
            .field("_all") 
            .allowLeadingWildcard(true)); 
       }); 

     SearchResponse response = client 
       .prepareSearch() 
       .setSize(10) 
       .addHighlightedField("*") 
       .setHighlighterRequireFieldMatch(false) 
       .setQuery(boolQueryBuilder) 
       .setHighlighterFragmentSize(40) 
       .setHighlighterNumOfFragments(40) 
       .execute() 
       .actionGet(); 

fieldフィールドだけでなく、highlightedFieldは、それが技術的に常に照会されることを考えると、常に応答ではアクセスできない理由上の任意のアイデア?

+0

こんにちは、私は理解することはできませんよ。シナリオでダミーデータを使ってリアルタイムの例を教えてください。 –

答えて

0

わからないが、私はあなたがこのために探しているかもしれないと思う: -

String aQueryWithPartialSerach = null; 
final BoolQueryBuilder aBoolQueryBuilder = new BoolQueryBuilder(); 

// Enabling partial sarch 
     if (query.contains(" ")) { 
      List<String> aTokenList = Arrays.asList(query.split(" ")); 
      aQueryWithPartialSerach = String.join(" ", aTokenList.stream().map(p -> "*" + p + "*").collect(Collectors.toList())); 
     } else { 
      aQueryWithPartialSerach = "*" + query + "*"; 
     } 

aBoolQueryBuilder.should(QueryBuilders.queryStringQuery(aQueryWithPartialSerach)); 
関連する問題