2016-09-05 13 views
2

私は(ハッシュタグのような)タグを割り当てることができ、以下のモデル、記事を、持っている:ここで春データelasticsearchのクエリ配列

@Entity 
@Table(name="article") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(
     name="post_type", 
     discriminatorType=DiscriminatorType.STRING 
) 
@DiscriminatorValue("text") 
@Document(indexName="article", type="article") 
public class Article implements Serializable { 
    @org.springframework.data.annotation.Id 
    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name="articleId") 
    private int articleId; 
    ... data for article... 
    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "user_id", nullable = false) 
    private User userId; 

    @Field(type = FieldType.Nested) 
    @ManyToMany(fetch = FetchType.EAGER) 
    private Set<Tag> tags = new LinkedHashSet<>();Simple {tagName, tagId} 

は、Tagモデルです:

@Entity 
@Table(name = "tag") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(
     name="tag_type", 
     discriminatorType=DiscriminatorType.STRING 
) 
@DiscriminatorValue("tag") 
public class Tag { 
    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name="id") 
    private int tagId; 

    @Column(name="tag_name") 
    private String tagName; 

spring-data-elasticsearchを使用して、tagNameを使用してクエリを実行しようとしています。私は、次のQueryBuilderクエリを試してみた:

QueryBuilder builder = nestedQuery("tags.tagName", matchQuery("tags.tagName", tagName)); 
QueryBuilder builder = nestedQuery("tags", matchQuery("tags.tagName", tagName)); 

しかし、次のスタックエラーが発生して終わる:私は間違って

org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase[dfs], all shards failed; 
shardFailures { 
    [10277 cVjTUK3mhchd - uBmw][article][0]: SearchParseException[[article][0]: from[0], size[10]: Parse Failure[Failed to parse source[{ "from": 0, "size": 10, "query": { "nested": { "query": { "match": { "tags.tagName": { "query": "holiday", "type": "boolean" } } }, "path": "tags.tagName" } }, "sort": [{ "number_likes": { "order": "desc" } }] }]]]; 
    nested: QueryParsingException[[article][nested] failed to find nested object under path[tags.tagName]]; } { 
    [10277 cVjTUK3mhchd - uBmw][article][1]: SearchParseException[[article][1]: from[0], size[10]: Parse Failure[Failed to parse source[{ "from": 0, "size": 10, "query": { "nested": { "query": { "match": { "tags.tagName": { "query": "holiday", "type": "boolean" } } }, "path": "tags.tagName" } }, "sort": [{ "number_likes": { "order": "desc" } }] }]]]; 
    nested: QueryParsingException[[article][nested] failed to find nested object under path[tags.tagName]]; } { 
    [10277 cVjTUK3mhchd - uBmw][article][2]: SearchParseException[[article][2]: from[0], size[10]: Parse Failure[Failed to parse source[{ "from": 0, "size": 10, "query": { "nested": { "query": { "match": { "tags.tagName": { "query": "holiday", "type": "boolean" } } }, "path": "tags.tagName" } }, "sort": [{ "number_likes": { "order": "desc" } }] }]]]; 
    nested: QueryParsingException[[article][nested] failed to find nested object under path[tags.tagName]]; } { 
    [10277 cVjTUK3mhchd - uBmw][article][3]: SearchParseException[[article][3]: from[0], size[10]: Parse Failure[Failed to parse source[{ "from": 0, "size": 10, "query": { "nested": { "query": { "match": { "tags.tagName": { "query": "holiday", "type": "boolean" } } }, "path": "tags.tagName" } }, "sort": [{ "number_likes": { "order": "desc" } }] }]]]; 
    nested: QueryParsingException[[article][nested] failed to find nested object under path[tags.tagName]]; } { 
    [10277 cVjTUK3mhchd - uBmw][article][4]: SearchParseException[[article][4]: from[0], size[10]: Parse Failure[Failed to parse source[{ "from": 0, "size": 10, "query": { "nested": { "query": { "match": { "tags.tagName": { "query": "holiday", "type": "boolean" } } }, "path": "tags.tagName" } }, "sort": [{ "number_likes": { "order": "desc" } }] }]]]; 
    nested: QueryParsingException[[article][nested] failed to find nested object under path[tags.tagName]]; } 

何をしているのですか?

QueryBuilder builder = matchAllQuery(); 
FilterBuilder filterBuilder = boolFilter().must(termFilter("tags.tagName", tagName)); 

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
.withQuery(QueryBuilders.filteredQuery(builder, filterBuilder)) 

あなたがフィルタリングクエリを使用し、すべてのエンティティを照合する必要があります。

答えて

2

は、以下のSEARCHQUERYセットアップを使用してみてください。

+0

ああ、それは完璧に機能しました。 – James111

関連する問題