2013-12-12 2 views
0

Вот основная схема моего кода:Lucene не проходя через модель в индексе

@Entity 
@Indexed 
public class Document { 

    @IndexedEmbedded 
    @OneToMany(cascade = { PERSIST, MERGE }, mappedBy = "owner") 
    private final Set<Issue> issues = new LinkedHashSet<Issue>(); 
} 

@Entity 
public class Issue { 

    @ManyToOne 
    @JoinColumn(name = "owner_id") 
    @ContainedIn 
    private final Document owner; 

    @IndexedEmbedded 
    @OneToOne(cascade = ALL, optional = false) 
    @JoinColumn(name = "name_id") 
    @ForeignKey(name = "FK_issue__name_id__text_element") 
    private final TextElement name = new TextElement(); 
} 

@Entity 
public class TextElement { 

    @OneToMany(cascade = { CascadeType.ALL }) 
    @JoinTable(
    name = "text_element_paragraph", 
    joinColumns = { @JoinColumn(name = "text_element_id") }, 
    inverseJoinColumns = { @JoinColumn(name = "paragraph_id") }, 
    uniqueConstraints = { 
    @UniqueConstraint(
    name = "UX_text_element_paragraph__paragraph_id", 
    columnNames = "paragraph_id"   
    ) 
    } 
) 
    @ForeignKey(
    name = "FK_text_element_paragraph__text_element_id__text_element", 
    inverseName = "FK_text_element_paragraph__paragraph_id__paragraph" 
) 
    @IndexedEmbedded 
    private List<Paragraph> paragraphs = new LinkedList<Paragraph>(); 
} 

@Entity 
public class Paragraph { 

    @Field(name = "data", analyze = Analyze.YES) 
    @Column(name = "s_data", nullable = false) 
    private String data; 
} 

Я думал, что Lucene будет индексировать данные в пункте, но когда я открываю Луки он показывает «issues.name .id "(id поступает из класса Document extends). Почему данные не индексируются? Спасибо :)

Следует также отметить, что я удалил ручного индексатора из метода обновления в службе CRUD. После этого все перестало работать, может быть, что-то с моими конфигурациями?

+0

На первый взгляд это выглядит правильно. Какую версию поиска вы используете? Как вы индексируете и уверены ли вы, что ваши тестовые данные фактически имеют непустые «данные»? – Hardy

+0

@ Hardy Для поиска в спящем режиме Я использую версию 4.1.1 Final. Данные теста должны содержать все непустые. Я думаю, что настоящая проблема заключается в том, что он не обновляет индекс при обновлении моделей. – Kat

+0

Как вы создаете/создаете экземпляр модели? Вы можете показать свой индексный код? Работает ли он, когда вы сохраняете новые объекты? Вы отмечаете, что он не работает во время обновлений. – Hardy

ответ

0

Добавляя следующее TextElement я был в состоянии получить поиска работы:

@ContainedIn 
private Document owner 
-1

Я думаю, что все сущности должны быть аннотированы как @Indexed, иначе @IndexEmbedded не будет распознавать объекты, подлежащие индексированию.

Кстати: глубокое перемещение может вызвать проблемы с повторной индексацией. Вам нужно пройти весь путь обратно с @ContainedIn ...

+0

Но я хочу, чтобы все было в индексе документа. Мне не нужны отдельные индексы для всего. – Kat

+1

вам не нужно @Indexed для каждого объекта. Только для основного индекса/объекта, который вы хотите найти. – Hardy

Смежные вопросы