2017-06-16 5 views
0

つのフィールドでコレクションを組み合わせました質問";
セクション2本文:「あなたの質問を投稿する」;
*その他の値は重要ではありません。

私はルークでsections.bodyをインデックス化するエンティティのドキュメントを見て次のようになります。私はそれは、この特定の文書を見つけるだろう文「回答ポスト」を含む文書を検索する場合Hibernateの検索@IndexEmbeddedは、私がどのように見えるのマッピングを持って

answer your own question post your question 

。それは私の望む結果ではありません。この文書は、検索した文字列が単一の本体内にある場合にのみ検索されます。

これも可能ですか?そうでなければ、私が望むものを達成するための方法はありますか?

答えて

0

これはコレクションの本質的な制限で、@IndexedEmbeddedです。コレクションのすべての要素がマージされます。

最初に質問するのは、本当にドキュメントを探していますか?異なるセクションの2つの単語が一致しないようにするには、代わりにセクションを検索したいと考えています。 この場合、Document.classの代わりにSection.classをターゲットにするだけでクエリを変更することができます。


あなたもDocument内のフィールドを検索できるようにする必要があります場合 は、その後、あなたは他の方法でラウンドを埋め込むことが可能です。このように、@IndexedEmbeddedSection.documentに置く:

@Entity 
@Table(name = "t_documents") 
@Indexed(interceptor = DocumentIndexingInterceptor.class) 
public class Document implements Serializable { 
    @Id 
    @GeneratedValue 
    @DocumentId 
    private Long id; 

    @ContainedIn // IMPORTANT: this will ensure that the "section" index is updated whenever a section is updated 
    private List<Section> sections; 

//... 
} 

@Entity 
@Table(name = "t_sections") 
@Indexed // TODO: if you need it, put an interceptor here, just as in Document? 
public class Section implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @DocumentId 
    private Long id; 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "ndocumentid") 
    @IndexedEmbedded(indexNullAs = "null", includePaths = { /* LIST YOUR PATHS HERE */ }) 
    private Document document; 

    @Field(name = "body", 
      analyze = Analyze.YES, 
      index = Index.YES, 
      store = Store.NO, 
      norms = Norms.NO) 
    @Column(name = "vbody") 
    private String body; 

//... 
} 
+0

文書であります私の主な存在。それは、タイトル、ステータス、著者、日付などのような多くのフィールドを含んでいます。それらはすべて索引付けされ、検索されます。 私は ''私はどこのタイトルが "いくつかのタイトルに等しい"とセクションのいずれかの単語 "いくつかの単語"を含むドキュメントを取得するようなクエリを取得したい –

+0

@ジョンスミスOk。インクルードされたパスを明示的に表示したくない場合は、それらのパスを省略することができます。すべてのフィールドが含まれます。次に、あなたが与えたクエリは、ドキュメントインデックスの代わりにセクションインデックスを照会すると、 'document.title: 'といくつかのタイトル" body: "いくつかの単語" 'に翻訳されます。 –

関連する問題