2017-03-15 12 views
0

著者が提供したキーワードまたはシステム生成されたキーワードのいずれかと一致するように、Elsaticsearch 5.2用のクエリフィルタをjavaでビルドしようとしています。ワイルドカードパスを実行しようとしていますが、結果は返されません。私はElasticsearchで標準の動的マッピングを使用しています。一致検索のパスのElasticsearchワイルドカード

{ 
    "content": { 
     "title": "The History of Cats", 
     "description": "A brief history of cats.", 
     "keywords": { 
      "author": ["cat"], 
      "system": ["felis", "animalia"] 
     } 
    } 
} 

理想的には、キーワードを持つユーザーの検索がcatまたはfelis彼らはこのレコードにヒットを取得する必要があります。現在、ヒットはありません。これは、このクエリビルダーまたは別のものによって達成できるものですか?マッピングを微調整する必要はありますか? ドリュー

答えて

0

いくつかの掘削した後、これはマルチ一致クエリ

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); 
queryBuilder.filter(QueryBuilders.multiMatchQuery(keyword, "content.keywords.*")); 

SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index") 
       .setTypes("article") 
       .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
       .setQuery(queryBuilder) 
       .setFrom(0) 
       .setSize(10) 
       .addSort(SortBuilders.scoreSort()); 

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); 

return searchResponse; 
に一致クエリを変更することによって達成することができる

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); 
queryBuilder.filter(QueryBuilders.matchQuery("content.keywords.*", keyword)); 

SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("my-index") 
       .setTypes("article") 
       .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) 
       .setQuery(queryBuilder) 
       .setFrom(0) 
       .setSize(10) 
       .addSort(SortBuilders.scoreSort()); 

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); 

return searchResponse; 

おかげ

関連する問題