2017-01-31 8 views
0

私はElasticsearch 2.4.3を使用していますが、クエリの特定のフィールドを強調したいとします。これは可能ですか?私はインデックスをどのように高めることができるのか分かります。Elasticsearchクエリ:特定のフィールドを強調する

おはようございます!

UPDATE

マッピング:

"firstName":{"type":"string", 
    "analyzer":"customNGram" 
}, 
"lastName":{ 
    "type":"string", 
    "analyzer":"customNGram" 
}, 
"note":{ 
    "type":"string", 
    "analyzer":"customNGram" 
} 

クエリ(のJava API):

QueryBuilder qb = new BoolQueryBuilder() 
     .must(QueryBuilders.matchQuery("_all", term) 
       .analyzer("atsCustomSearchAnalyzer") 
       .operator(Operator.AND)); 

    SearchRequestBuilder searchRequestBuilder = elasticsearchClient.prepareSearch("persons", "activities").setTypes("person", "activity") 
      .setQuery(qb) 
      .addHighlightedField("*").setHighlighterRequireFieldMatch(false) 
      .setHighlighterOrder("score") 
      .setHighlighterFragmentSize(150) 
      .setHighlighterForceSource(true) 
      .setSize(100) 
      .addIndexBoost("persons", 200) 
      .setFrom(offset); 

    return searchRequestBuilder.execute().get(); 
+0

これまでに試したマッピングとクエリを表示できますか? – user3775217

+0

ご質問のために私の質問を更新しました –

答えて

1

あなたは個々のフィールドを一致させるために、あなたのマッチクエリを分割した場合、例えばマルチを使用して一致クエリ(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html)を使用すると、好きなフィールドを上げることができます。だから、のようなもの:

QueryBuilder qb = new BoolQueryBuilder() 
    .must(QueryBuilders.multiMatchQuery(term, "firstName^3", 
    "lastName^3", "note") 
      .analyzer("atsCustomSearchAnalyzer") 
      .operator(Operator.AND)); 

は、姓と名にメモフィールドに対する3回を後押しすべきです。

+0

素晴らしい!ありがとうございました! –

関連する問題